我正在编写搜索功能,并使用参数来考虑此查询以防止或至少限制SQL注入攻击。但是,当我通过我的程序运行它时,它不会返回任何内容:
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
可以像这样使用参数吗?或者它们仅在以下实例中有效:
SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'
(其中<string>
是搜索对象)。
另外,我在SQL Server中运行了这个语句:SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE
%max%')`并返回结果。
答案 0 :(得分:108)
好吧,我会选择:
Dim cmd as New SqlCommand(
"SELECT * FROM compliance_corner"_
+ " WHERE (body LIKE @query )"_
+ " OR (title LIKE @query)")
cmd.Parameters.Add("@query", "%" +searchString +"%")
答案 1 :(得分:76)
您的可视基本代码看起来像这样:
Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")
cmd.Parameters.Add("@query", searchString)
答案 2 :(得分:25)
你必须这样做:
LIKE '%' + @param + '%'
答案 3 :(得分:1)
您可能必须将%符号与您的参数连接起来,例如:
LIKE'%'|| @query || '%'
编辑: 实际上,这根本没有任何意义。我想我可能误解了你的问题。
答案 4 :(得分:1)
如果从VB执行查询,就像从MS SQL / Access执行查询时,用作占位符%
的符号有时不一样。尝试将占位符符号从%
更改为*
。那可能有用。
但是,如果您调试并希望直接在MS SQL或Access中复制SQL字符串以对其进行测试,则可能必须在MS SQL或Access中将符号更改回%
,以便实际返回值。
希望这有帮助
答案 5 :(得分:0)
也尝试这种方式
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 代替 +