Mysql LIKE中特殊字符转义【附php实现函数】
2013-04-22 16:53
721 查看
提要:Mysql的LIKE的转义和普通字符串的不同。
首先来看一个测试:
可以看出”\\\\“在LIKE中转义成”\“,LIKE的转义和平时用的字符串的转义还是有点不一样的。
查了下官方文档,对于转义字符的解释:
mysql自己的parser转义一次,然后LIKE的pattern对前面的结果再转义一次。
也就是说上例中的“\\\\”第一次转义成“\\”,第二次才是“\”。
再来看个mysql字符转义的测试
呵呵,什么都转义(比如"\x" 转义成“x”,“\b"是回退字符),就是不转义”\%“和”\_“。而LIKE,都转义。恐怕MYSQL这样做的目的也是为了兼容LIKE吧。
总结下,LIKE转义字符串时,一共两次,第一次不转义”\%“和”\_“,第二次全部转义。转义的特殊字符可以参见 http://dev.mysql.com/doc/refman/5.1/en/string-literals.html#character-escape-sequences
LIKE的转义可以看成先替换“\\\\”为“\”,剩下的字符串用”\\“转义,剩下的字符串再用”\"转义。通常不遇见“\\”, LIKE的特殊解析是感觉不到的。
下面附上PHP的LIKE转义代码:
首先来看一个测试:
mysql> SET @a='\\';SELECT @a,@a LIKE '\\\\'; +----+----------------+ | @a | @a LIKE '\\\\' | +----+----------------+ | \ | 1 | +----+----------------+
可以看出”\\\\“在LIKE中转义成”\“,LIKE的转义和平时用的字符串的转义还是有点不一样的。
查了下官方文档,对于转义字符的解释:
this is because the backslashes are stripped once by the parser and again when the pattern match is made, leaving a single backslash to be matched against.
mysql自己的parser转义一次,然后LIKE的pattern对前面的结果再转义一次。
也就是说上例中的“\\\\”第一次转义成“\\”,第二次才是“\”。
再来看个mysql字符转义的测试
mysql> SELECT '\%','\_'; +----+----+ | \% | \_ | +----+----+ | \% | \_ | +----+----+ 1 row in set
呵呵,什么都转义(比如"\x" 转义成“x”,“\b"是回退字符),就是不转义”\%“和”\_“。而LIKE,都转义。恐怕MYSQL这样做的目的也是为了兼容LIKE吧。
总结下,LIKE转义字符串时,一共两次,第一次不转义”\%“和”\_“,第二次全部转义。转义的特殊字符可以参见 http://dev.mysql.com/doc/refman/5.1/en/string-literals.html#character-escape-sequences
LIKE的转义可以看成先替换“\\\\”为“\”,剩下的字符串用”\\“转义,剩下的字符串再用”\"转义。通常不遇见“\\”, LIKE的特殊解析是感觉不到的。
下面附上PHP的LIKE转义代码:
//$pdo是PDO的实例, //$str为搜索的字符串,如从表单中直接提交获取的 //先完成LIKE的转义 $str=strtr($str,array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')); //添加 %及_,组成完整搜索条件 $str='%'.$str.'%'; //mysql字符串的转义 $str=$pdo->quote($str);
相关文章推荐
- Mysql LIKE中特殊字符转义【附php实现函数】
- Mysql LIKE中特殊字符转义【附php实现函数】
- Mysql LIKE中特殊字符转义【附php实现函数】
- PHP转义Json里的特殊字符的函数
- Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
- mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符,可使用本函数来预防数据库攻击。
- 老版本PHP转义Json里的特殊字符的函数
- Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
- **PHP转义Json里的特殊字符的函数
- PHP转义Json里的特殊字符的函数
- PHP转义Json里的特殊字符的函数
- Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
- PHP mysqli_real_escape_string()函数--转义 SQL 语句中的特殊字符
- 使用函数递归实现基于php和MySQL的动态树型菜单
- php实现gbk和uft8编码中英文字符截取函数的应用
- php 特殊字符处理函数
- php中 mysql 插入特殊字符(手机端的emoji表情)出现异常
- regex 正则表达式 需要转义的特殊字符 以及 java、python实现