如何? 参数和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而不是+