방법? 매개 변수 및 LIKE 문 SQL
나는 검색 기능을 쓰고 있으며, SQL 주입 공격을 방지하거나 최소한 제한하기 위해 매개 변수를 사용하는 이 쿼리를 생각해 냈습니다.그러나 프로그램을 통해 실행해도 아무것도 반환되지 않습니다.
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
매개 변수를 이렇게 사용할 수 있습니까?또는 다음과 같은 인스턴스에서만 유효합니다.
SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'
(어디서<string>
검색 개체)입니다.
편집: VB로 이 기능을 구성하고 있습니다.NET, 당신들이 기여한 구문에 영향을 미칩니까?
또한 SQL Server에서 다음 문을 실행했습니다.SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE
%max%''이(가) 반환됩니다.
글쎄요, 저는 다음과 같이 하겠습니다.
Dim cmd as New SqlCommand(
"SELECT * FROM compliance_corner"_
+ " WHERE (body LIKE @query )"_
+ " OR (title LIKE @query)")
cmd.Parameters.Add("@query", "%" +searchString +"%")
시각적 기본 코드는 다음과 같습니다.
Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")
cmd.Parameters.Add("@query", searchString)
다음을 수행해야 합니다.
LIKE '%' + @param + '%'
% 기호를 매개 변수와 연결해야 할 수 있습니다. 예:
좋아요 '%' || @query || '%'
편집: 사실, 그것은 전혀 말이 안 될 수도 있습니다.제가 당신의 문제를 오해한 것 같습니다.
때때로 자리 표시자로 사용되는 기호%
VB에서 쿼리를 실행하는 경우와 MS SQL / Access에서 쿼리를 실행하는 경우는 다릅니다.자리 표시자 기호 변경 시도:%
로.*
그럴 수도 있어요.
그러나 디버깅을 하고 테스트하기 위해 MS SQL 또는 Access에서 직접 SQL 문자열을 복사하려면 기호를 다음으로 다시 변경해야 할 수 있습니다.%
MS SQL 또는 Access에서 실제로 값을 반환합니다.
이것이 도움이 되길 바랍니다.
이 방법도 시도해 보세요.
Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE CONCAT('%',@query,'%') OR title LIKE CONCAT('%',@query,'%') )")
cmd.Parameters.Add("@query", searchString)
cmd.ExecuteNonQuery()
+ 대신 Concat 사용
언급URL : https://stackoverflow.com/questions/251276/howto-parameters-and-like-statement-sql
'programing' 카테고리의 다른 글
Git를 Xcode와 통합할 수 있습니까? (0) | 2023.05.14 |
---|---|
업스트림에 변경 사항이 있는 경우 git 상태에서 branch가 최신 상태로 표시되는 이유는 무엇입니까? (0) | 2023.05.14 |
Azure 키 볼트: 액세스 거부됨 (0) | 2023.05.14 |
코드를 사용하여 WPF에서 바인딩 제거 (0) | 2023.05.14 |
병합 충돌을 해결한 후 병합을 완료하려면 어떻게 해야 합니까? (0) | 2023.05.14 |