[asp.net] 어떻게? 매개 변수 및 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 + '%'


답변

% 기호를 매개 변수와 연결해야 할 수 있습니다. 예 :

‘%’처럼 || @ 쿼리 || ‘%’

편집 : 사실, 전혀 말이되지 않을 수도 있습니다. 나는 당신의 문제를 오해 한 것 같습니다.


답변

%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 대신 +


답변