2012-10-28 2 views
0

나는 페이지를 쿼리 할 때 사용자는 매개 변수의 일종을 통과 C.로 작성된 CGI 스크립트에서 SQL 쿼리를 구축을 위해 노력하고, 그리고 스크립트를 조회 할 필요가 :C MySQL의 API 준비된 명령문 제한

SELECT `name`, `address`, `phone_number` FROM `restaurants` WHERE `name` LIKE '%{parameter}%' 

이스케이프 및 보안 문제로 인해 {parameter}을 % s 및 sprintf로 바꿀 수는 없습니다.

그러므로 나는 준비된 성명을 구축했습니다

const char * statement = "SELECT `name`, `address`, `phone_number` FROM `restaurants` WHERE `name` LIKE '%?%'"; 

무슨 일이 끝나는 것은 내 물음표 구문 분석되지 않는다는 것입니다 및 바인딩이 실패합니다. 문장의 끝을 "name LIKE?"로 변경하면 용어가 포함 된 결과가 손실되는 것을 제외하고는 완벽하게 작동합니다.

이 문제를 해결하고 문자열 내에 LIKE 및 매개 변수가 포함 된 SQL 문을 적절하고 안전하게 만들 수 있습니까?

감사합니다.

답변

0

php와 mysli를 사용하면 같은 문제가 발생합니다. 거기에 해킹은 SQL 함수 concat을 사용하는 것입니다 (예 : LIKE CONCAT('%',?,'%')). C에서 작동해야합니다.

0

strcat 함수를 사용하여 새 쿼리 문자열을 작성하지 않는 이유는 무엇입니까? http://home.fhtw-berlin.de/~junghans/cref/MAN/strcat.htm 문제가 해결됩니다. - 내가 그는 PHP API를 통해 수행 (작업을해야한다고 생각

char *cmd = "SELECT `name`, `address`, `phone_number` FROM `restaurants` WHERE `name` LIKE '%": 
char *cmdEnd = "%'"; 

// concat strings 
strncat(cmd, parameter, strlen(parameter); 
strncat(cmt,cmdEnd); 
1

조회에 LIKE ?를 사용하여 시도하고 앞에 추가가/%으로 매개 변수 문자열을 추가 :

// 편집 : 예를 들어 어쨌든, 두포에서 같은 라이브러리를 사용할 수도 있습니다).

같은 문제가 PHP : How do I create a PDO parameterized query with a LIKE statement?

로 표시됩니다