2014-05-16 2 views
0

DB에 추가 할 때 제거하거나 이스케이프 할 수없는 아포스트로피가 포함 된 일부 문자열로 MySQL DB를 쿼리하고 있습니다. 아포스트로피가 포함 된 문자열에서 쿼리가 실패하지 않도록 포맷하려면 어떻게해야합니까? 의 위치에 대한아포스트로피가 포함 된 DB 필드 문자열과 함께 SQL 쿼리가 실패합니다.

"Cedar Tree Neck, Martha's Vineyard, Massachusetts" 

모든 쿼리 :

"SELECT * FROM NationalTideStationsA WHERE MATCH(location) AGAINST('$myState')"; 

이 위치 필드가 포함되어있는 경우, 반환 된 문자열은 예를 들어, 아포스트로피가있을 때마다 실패 예를 들어, 전체 텍스트에 대해 쿼리를 수행 필드 색인 매사추세츠는 실패합니다.

SQL이 이에 대응하기 위해 쿼리의 형식을 지정하는 방법을 제공한다면 해결할 수 없습니다.

SELECT 쿼리는 다른 방식으로 원하는대로 작동합니다.

+2

"sql injection"에 대한 정보를 읽어보십시오. db의 인코딩 및 이스케이프 메소드를 사용하십시오. – Rudie

+1

** 외부 변수를 사용하여 SQL 문을 작성하면 코드가 SQL 삽입 공격에 취약 해집니다. ** 또한 "O'Malley"와 같이 작은 따옴표가있는 입력 데이터는 쿼리를 폭파시킵니다. 웹 응용 프로그램을 보호하기 위해 PDO 모듈을 사용하여 매개 변수가있는 쿼리에 대해 알아보십시오. [이 질문] (http://stackoverflow.com/questions/60174)에는 많은 상세한 예제가 있습니다. 위험의 대안 및 설명은 http://bobby-tables.com/php를 참조하십시오. ** 외부 데이터로 작성된 SQL 문을 실행하는 것은 문앞에서 발견 된 재료로 만든 스프를 먹는 것과 같습니다. ** –

답변

0

SQL 인젝션을 읽으려는 제안에 동의합니다. 즉각적인 경우 모든 작은 따옴표를 두 개의 작은 따옴표로 바꾸십시오.

관련 문제