Подтвердить что ты не робот

Как? Параметры и инструкция 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% ') `и возвращает результаты.

4b9b3361

Ответ 1

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

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")

cmd.Parameters.Add("@query", searchString)

Ответ 2

Ну, я бы пошел с:

 Dim cmd as New SqlCommand(
 "SELECT * FROM compliance_corner"_
  + " WHERE (body LIKE @query )"_ 
  + " OR (title LIKE @query)")

 cmd.Parameters.Add("@query", "%" +searchString +"%")

Ответ 3

вам нужно сделать:

LIKE '%' + @param + '%'

Ответ 4

Возможно, вам придется объединить знаки% с вашим параметром, например:

LIKE '%' || @query || '%'

Изменить: На самом деле это может не иметь никакого смысла. Я думаю, что я, возможно, неправильно понял вашу проблему.

Ответ 5

Иногда символ, используемый в качестве заполнителя %, не то же самое, если вы выполняете запрос из VB, как при его выполнении из MS SQL/Access. Попробуйте изменить свой символ-заполнитель от % до *. Это может сработать. Однако, если вы отлаживаете и хотите скопировать строку SQL непосредственно в MS SQL или Access для ее проверки, вам может потребоваться изменить символ на % в MS SQL или Access, чтобы фактически вернуть значения.

Надеюсь, что это поможет

Ответ 6

попробуйте также этот путь

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()

Используется Конкат вместо +