Как это? Параметры и оператор 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 ответов:
ваш код 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 +"%")
возможно, Вам придется объединить знаки % с параметром, например:
Как ' % ' / / @query|/'%'
изменить: На самом деле, это может вообще не иметь никакого смысла. Я думаю, что, возможно, неправильно понял вашу проблему.
иногда символ используется в качестве заполнителя
%
не то же самое, если вы выполняете запрос из VB, как при выполнении его из MS SQL / Access. Попробуйте изменить символ-заполнитель с%
до*
. Это может сработать.
Однако, если вы отлаживаете и хотите скопировать свою строку SQL непосредственно в MS SQL или Access для ее тестирования, вам может потребоваться изменить символ обратно на%
в MS SQL или Access, чтобы фактически возвращать значения.надеюсь, что это помогает