2009-08-06 6 views
1

SQL 쿼리를 작성하려고하는데 문제가 있습니다. 우리는 우리의 결과를 좁힐 수있는 곳에 절을 사용하여 쿼리를 작성하고자 할 때, 우리는 sql 쿼리 작성

을 ... 할 수있는 이름 = '존'

(이름은 테이블의 열 인 경우). 이제 "O'Malley"라는 이름을 제외하고 이와 같은 절을 삽입하려고합니다. 그래서 쿼리가

을 ... 것이라고 생각 어디 이름 = '오말리'

그러나 이것은 나에게 널 포인터 예외를 제공합니다. 누구든지이 문제를 해결할 수있는 방법을 알고 있습니까?

미리 도움을 주셔서 감사합니다.

답변

3

"O'Malley"문자열의 작은 따옴표는 SQL에 의해 문자열 종결 자로 해석됩니다. 작은 따옴표를 탈출하기 위해, 다음과 같이 두 개의 작은 따옴표로 대체 :

where name = 'O''Malley' 

편집 : 문자열 "오말리는"사용자 입력에서 온 경우, 코드는 SQL injection가 공격에 취약합니다. 이러한 위험을 피하려면 매개 변수가있는 쿼리를 사용하십시오.

+0

@Richbits ... "O'Malley"아시겠지만, 작은 따옴표와 모두 –

+0

예, 저의 잘못된 정보가 삭제되었습니다. – Richbits

1

검색 문자열에 두 개의 아포스트로피를 함께 사용하면 SQL은 해당 문자열이 SQL 구문의 일부가 아니며 문자열의 일부임을 인식합니다.

where name = 'O''Malley' 
2

사용 바인드 변수는 인용 문제에 대해 생각을 방지 할 수 있습니다. 바인드 변수는 SQL 인젝션을 고려합니다.

+0

-1 원래 포스터와 모호합니다. –