Я пишу функцию поиска и придумал этот запрос, используя параметры, чтобы предотвратить или хотя бы ограничить атаки 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% ') `и возвращает результаты.
Ваш визуальный базовый код будет выглядеть примерно так:
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, чтобы фактически вернуть значения.
Надеюсь, что это поможет
Возможно, вам придется объединить знаки% с вашим параметром, например:
LIKE '%' || @query || '%'
Изменить: На самом деле это может не иметь никакого смысла. Я думаю, что я, возможно, неправильно понял вашу проблему.
попробуйте также этот путь
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()
Используется Конкат вместо +