MySQL RLIKE特殊字符转义PHP

时间:2015-03-19 23:36:30

标签: php mysql sql regex pdo

我尝试使用RLIKE MySQL指令进行简单的多字搜索,但是当你插入关键字chars时就像")($ *"我得到一个PDO异常和一个MySQL错误,例如插入"("我得到:

  

SQL错误:SQLSTATE [42000]:语法错误或访问冲突:1139错误'括号不平衡'来自regexp

,查询非常简单:

SELECT * FROM users WHERE users.name RLIKE :q ORDER BY users.name LIMIT 0, 20;

其中:q是搜索关键字的PDO参数。在PHP中存在一种函数或PDO方法用于这种char转义?或者,如果不是另一种方式呢?

1 个答案:

答案 0 :(得分:1)

这些字符在正则表达式模式中具有特殊含义,要将它们写为必须转义它们的文字字符:\(\)\$或将它们放在字符类中: [)][(][$]

请参阅有关正则表达式的教程以了解这些字符及其含义。

如果要从php脚本中转义这些特殊字符,请使用preg_quote函数自动将这些字符转义为param。有关详细信息,请参阅PHP手册。

但是preg_quote旨在处理与MySQL中使用的PCRE语法(PHP使用的正则表达式引擎)的不同。