在数据库中,我在一个名为Description的字段中存储了一些文本,保存在数据库中的字符串的值是MeYou "R'S'" %
,这就是它在查询数据库命令行时的显示方式。
现在,在一个网页上,我有一个搜索该字段的功能:
WHERE描述LIKE"%$searchstring%"
因此,当清理了$searchstring后,如果我在搜索MeYou
,反斜杠将得到转义,我的查询将读取:
WHERE描述如"%Me\\You%"
然而,它没有返回任何内容。
奇怪的是,当我搜索Me\\\You或Me\\\You(所以有两个或三个反斜杠,但不少于或不多于)时,它会返回我期望的带有一个反斜杠的结果。
查询结果命令行时,不会返回以下项的结果:
WHERE描述如"%Me\You%"
或者当我使用两个或三个反斜杠时。
然而,如果我使用4-7个反斜杠,它将返回结果,例如:
WHERE描述如"%Me \\\\You%"
将返回MeYou "R'S'" %
字符串
有人知道发生这种事的原因吗?感谢
注意
因为MySQL在字符串中使用C转义语法(例如,"n
"表示换行符),所以必须将LIKE字符串中使用的任何""加倍。例如,要搜索"
n
",请将其指定为"\n
"。要搜索"",请将其指定为"
\\
";这是因为反斜杠被解析器剥离一次,在进行模式匹配时再次剥离,留下一个要匹配的反斜杠。
来源:http://dev.mysql.com/doc/refman/5.1/en/string-comparison-functions.html#operator_like
阅读此需要在MySQL中只选择包含反斜杠的数据,以了解如何使用双反斜杠转义。您也可以在NO_BACKSLASH_ESCAPES模式下运行MySQL(http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_no_backslash_escapes)
尽管这是一篇旧文章,但您可以使用replace函数将反斜杠更改为另一个字符来绕过此限制:类似于WHERE子句中的内容。示例:WHERE替换('your field here','\','-'),如"You Me%"