【问题标题】:MySQL RLIKE special chars escaping PHPMySQL RLIKE 特殊字符转义 PHP
【发布时间】:2015-05-23 07:04:34
【问题描述】:

我正在尝试使用 RLIKE MySQL 指令进行简单的多词搜索,但是当您插入关键字字符(如“)($ *”时,我得到一个 PDO 异常和一个 MySQL 错误,例如插入“( “我明白了:

SQL 错误:SQLSTATE[42000]:语法错误或访问冲突:1139 从正则表达式中得到错误“括号不平衡”

而且查询很简单:

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

:q 是搜索关键字的 PDO 参数。 PHP 中是否存在用于这种字符转义的函数或 PDO 方法?或者如果没有其他方法可以做到这一点?

【问题讨论】:

    标签: php mysql sql regex


    【解决方案1】:

    这些字符在正则表达式模式中具有特殊含义,要将它们写为文字字符,您必须使用双反斜杠将它们转义:\\(\\)\\$ 或将它们放入字符类中:@987654324 @、[(][$]

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

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

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

    【讨论】:

    • 非常感谢您的回答(对不起,我迟到了)我已经解决了使用普通 LIKE 对三个文本字段进行 CONCATE 的返回,并在基本之后使用搜索查询检查结果转义“%”和我网站字符串中不允许的其他字符,例如:CONCATE(name, ' ', surname, ' ', username) LIKE '%test of name%',这不是很好看到但有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多