【问题标题】:Wildcards in SQL parameterSQL 参数中的通配符
【发布时间】:2011-09-07 12:21:31
【问题描述】:

我需要在我的 SQL Server 数据库中进行类似搜索。但是,我该怎么做,同时仍然使用参数作为我的搜索值?

我不是在谈论封装在% 中。我需要能够在搜索词中间添加%。

WHERE title LIKE '%foo%bar%'

作为示例,但带有参数。

编辑: 详细说明参数: 我正在使用 MS SQL 2008 和 C#,所以它是:

WHERE title LIKE '@SearchParam'

然后@SearchParam 将被设置为"%foo%bar%"。

我希望这是有道理的?

【问题讨论】:

  • 这听起来像是对 sql 注入的邀请。也许您应该查看全文索引?
  • 你能举个参数的例子吗?我猜您将参数作为foobar 传递,并希望在两者之间插入%。我说的对吗?
  • 我只是想让用户在他的搜索字段中添加一个 *,然后用 % 替换它。因此,用户可以搜索“Nic*olai”并返回“Nicoolai”。我试图避免打开注射。如果我不能用参数做到这一点,我可能根本不会这样做。

标签: sql parameters wildcard sql-like


【解决方案1】:

这很好用

create proc dbo.lookupWild(@LIKEclause VARCHAR(20))
as
begin
    select * from teams where Name like @LIKEclause
end
go
exec lookupWild 'E%G%'  

像 '1=1 -- drop table' 这样的东西不是 SQL 注入的,它们只是通配符搜索的一部分

【讨论】:

  • 存储过程真的是唯一的方法吗?
  • 我真的不明白这是怎么回事?如果您: exec lookupWild 'E%' 或 '1'='1 - 为什么不会破坏 exec 命令?
  • 试一试。 SQL 不会将该参数解释为查询的附加文本。该参数只是 LIKE 子句,因此如果您输入示例,SQL 会将其视为 LIKE 表达式....
  • 您不必将其作为存储过程进行,上面的代码将适用于任何选择语句。当您获取 INPUT 字符串并将其与另一个字符串组合,然后使用您构建的字符串作为参数运行 EXEC 或 SP_ExecSQL 时,SQL 注入会成为一个问题。
  • 你是对的,它有效。我只是不明白。我会假设通配符会被转义而不被视为通配符。
【解决方案2】:

如果您使用的是存储过程,这应该可以正常工作。 Here 是一个类似的线程。

How to Escape Wildcard Characters While Searching in SQL Server

你在寻找类似下面的东西吗?

where title like '%foo[%]bar%'

【讨论】:

  • 也许我理解错了这个问题,但我认为存储过程不会解决这里的潜在问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2013-02-09
相关资源
最近更新 更多