【问题标题】:Escaping user input in SQL parameters在 SQL 参数中转义用户输入
【发布时间】:2012-06-10 01:12:56
【问题描述】:

我在SELECT 语句中有以下WHERE 条件:

WHERE ('.' + column_name LIKE @prefix))

@prefix参数设置如下:

cmd.Parameters.AddWithValue("@prefix", "%[^a-z]" & prefix & "%")

prefix 变量取自表单输入。

我遇到的问题是当用户输入“%”或“[”或其他特殊字符时。如何确保这些被转义而不是被视为特殊字符?

相关:通常,您如何阻止人们在输入中输入“%”并将其视为通配符?

【问题讨论】:

标签: asp.net sql-server .net-3.5


【解决方案1】:

SQL's LIKE operator 提供了一个可选的ESCAPE 子句:

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

您可以将转义字符设置为您喜欢的单个字符,并使用它转义元字符。

【讨论】:

  • 你能给我一个这样的例子吗?
  • @Andrew 您可以使用Regex.Replace(prefix, "[~%_[\\]]", "!$0") 转义带有感叹号! 的前缀,然后在转义子句中使用感叹号:column_name LIKE @prefix ESCAPE '!'
  • 谢谢。我已更改为prefix = Regex.Replace(prefix, "[!~%_[\]]", "!$0")。我收集 ! 需要转义,因为它是转义字符。另外,为什么要加入~
  • @Andrew “你为什么要包括〜?”因为它在键盘上的!旁边,所以我按错了键:)它应该是[!%_[\\]]
猜你喜欢
  • 2015-07-15
  • 1970-01-01
  • 2015-10-18
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 2011-11-18
相关资源
最近更新 更多