当前位置:  开发笔记 > 后端 > 正文

如何?参数和LIKE语句SQL

如何解决《如何?参数和LIKE语句SQL》经验,为你挑选了3个好方法。

我正在编写一个搜索功能,并使用参数来考虑这个查询,以防止或至少限制SQL注入攻击.但是,当我通过我的程序运行它时,它不会返回任何内容:

SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')

可以像这样使用参数吗?或者它们仅在以下情况下有效:

SELECT * FROM compliance_corner WHERE body LIKE '%%'(搜索对象在哪里).

编辑:我用VB.NET构建这个函数,这对你们贡献的语法有影响吗?

此外,我在SQL Server中运行此语句:SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE%max%')`并返回结果.



1> James Curran..:

好吧,我会选择:

 Dim cmd as New SqlCommand(
 "SELECT * FROM compliance_corner"_
  + " WHERE (body LIKE @query )"_ 
  + " OR (title LIKE @query)")

 cmd.Parameters.Add("@query", "%" +searchString +"%")


我不确定他的语法是如何不正确的,他的解决方案工作正常.我有一个函数构造并返回一个SQL语句,以便在数据表或其他任何东西中使用.
另一个答案(来自约翰)也有效,但确实容易受到注射的影响,根据你的领域的目的,可能会给出奇怪的结果.

2> John..:

您的可视基本代码看起来像这样:

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")

cmd.Parameters.Add("@query", searchString)


它不是"SQL"注入,只是"LIKE"注入.这意味着用户可以输入特殊字符,如`%``^`和`_`,`LIKE'将特别解释.这意味着用户可能无法获得他们对某些搜索的期望.例如,搜索"不到1%脂肪"可能会返回结果"不到1%的医生推荐这个 - 它充满了脂肪!".
你能提供一个不阻止SQL注入的例子吗?从我的测试它工作正常
正如Adam在他的回答中指出的那样,这并不能防止SQL注入.查询应该参数化.

3> Andrew Bullo..:

你必须做:

LIKE '%' + @param + '%'

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有