저는 검색 기능을 작성 중이며 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 + '%'
답변
% 기호를 매개 변수와 연결해야 할 수 있습니다. 예 :
‘%’처럼 || @ 쿼리 || ‘%’
편집 : 사실, 전혀 말이되지 않을 수도 있습니다. 나는 당신의 문제를 오해 한 것 같습니다.
답변
%
VB에서 쿼리를 실행하면 MS SQL / Access에서 실행할 때와 같은 경우 자리 표시 자로 사용되는 기호 가 다를 수 있습니다. 자리 표시 자 기호를에서 %
로 변경해보십시오 *
. 작동 할 수 있습니다.
그러나 디버깅하고 SQL 문자열을 MS SQL 또는 Access에서 직접 복사하여 테스트 %
하려면 실제로 값을 반환하기 위해 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 대신 +