无法使用“LIKE”关键字搜索Mysql,转义字符串字段

时间:2012-02-04 13:37:20

标签: php mysql

考虑到Mysql表中的一个字段(sample_field)有“你的数据”,当我查询同一个表时

SELECT * FROM sample_table WHERE sample_field = "your\'s data"

也喜欢

SELECT * FROM sample_table WHERE sample_field = "your's data"

上述两个查询都返回0行,即使sample_field的值为“您的数据”

经过长时间的搜索,我才知道,我的搜索将是

SELECT * FROM sample_table WHERE sample_field = "your\\\'s data"

工作得非常好。但

SELECT * FROM sample_table WHERE sample_field LIKE "your\\\'s data"

无效。因此,如果我想搜索带引号的任何产品或类别(例如“您的数据”),在网站搜索中我必须使用LIKE关键字和通配符模式('%')。

现在我找到了答案,如果我这样尝试

SELECT * FROM sample_table WHERE sample_field LIKE "your\\\\'s data"

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like中给出,它工作正常。

但请让我知道为什么需要这4个反斜杠才能实现这个目标?

提前致谢

3 个答案:

答案 0 :(得分:3)

如果你想让它成为字面上的反斜杠,你必须逃避逃避反斜杠:

WHERE sample_field = "your\\'s data"

但实际上,首先在数据库中使用反斜杠是错误,而是修复它。

答案 1 :(得分:1)

因为MySQL在字符串中使用C转义语法(例如,“\ n”表示换行符),所以必须将在LIKE字符串中使用的任何“\”加倍。例如,要搜索“\ n”,请将其指定为“\ n”。要搜索“\”,请将其指定为“\\”;这是因为反斜杠被解析器剥离一次,并且在进行模式匹配时再次剥离,留下一个反斜杠来匹配。

答案 2 :(得分:0)

试试这样:

... WHERE sample_field = 'your\'s data'