Nice programing

어떻게?

nicepro 2020. 10. 15. 21:40
반응형

어떻게? 매개 변수 및 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 대신 +

참고 URL : https://stackoverflow.com/questions/251276/howto-parameters-and-like-statement-sql

반응형