Как это? Параметры и оператор LIKE SQL


Я пишу функцию поиска и придумал этот запрос, используя параметры, чтобы предотвратить или, по крайней мере, ограничить атаки SQL-инъекций. Однако, когда я запускаю его через свою программу, он ничего не возвращает:

SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')

можно ли использовать такие параметры? или они действительны только в таком экземпляре, как:

SELECT * FROM compliance_corner WHERE body LIKE '%<string>%' (где <string> - это объект поиска).

EDIT: я строю эту функцию с помощью VB.NET, есть ли у этого влияние на синтаксис вы, ребята, внесли свой вклад?

кроме того, я запустил этот оператор в SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE % max%') ' и это возвращает результаты.

6 72

6 ответов:

ваш код visual basic будет выглядеть примерно так:

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. Попробуйте изменить символ-заполнитель с % до *. Это может сработать.
Однако, если вы отлаживаете и хотите скопировать свою строку 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 вместо +