如何? 参数和LIKE语句SQL
我正在编写一个search函数,并使用参数考虑了这个查询,以防止或至less限制SQL注入攻击。 但是,当我通过我的程序运行它不返回任何东西:
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
参数可以像这样使用? 或者它们只在以下情况下才有效:
SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'
(其中<string>
是search对象)。
编辑:我用VB.NET构build这个function,这是否影响你们贡献的语法?
另外,我在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 + '%'
您可能必须连接%符号与您的参数,例如:
LIKE'%'|| @query || '%'
编辑:其实,这可能没有任何意义。 我想我可能误解了你的问题。
有时用作占位符的符号不一样,如果你从VB执行一个查询,就像你从MS SQL / Access执行一样。 尝试将您的占位符符号从%
更改为*
。 这可能工作。
但是,如果您debugging并希望直接在MS SQL或Access中复制您的SQLstring以对其进行testing,则可能必须在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而不是+