programing

방법? 매개 변수 및 LIKE 문 SQL

stoneblock 2023. 5. 14. 10:04

방법? 매개 변수 및 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