【发布时间】:2021-09-13 08:59:31
【问题描述】:
mariadb 版本10.4
$query->where('column', 'REGEXP', '[[:<:]]'.$string.'[[:>:]]');
此查询仅提供整个单词的搜索,并且没有特殊字符也可以正常工作。
示例
搜索行:
foo (bar baz)
过滤器:
$string = "(bar";
$query->where('column', 'REGEXP', '[[:<:]]'.$string.'[[:>:]]');
错误:
SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'missing )
现在我尝试使用addcslashes 和preg_quote。我成功地用preg_quote 转义了( 字符,但过滤器不适用于该字符串,因为过滤器适用于整个单词。
任何关于更好地过滤整个单词的建议也将不胜感激。
再举一个例子
搜索行:
foo(bar baz
过滤器:
$filter = 'foo(bar';
$query->where('column', 'REGEXP', '[[:<:]]'.$string.'[[:>:]]');
如果( 将被转义,则搜索将不起作用
【问题讨论】:
-
whereRaw()工作吗? -
同样的结果。谢谢!
-
也许这对你有帮助:stackoverflow.com/a/46627403/7451109
-
'[[:<:]]\\\\(bar[[:>:]]'工作吗? -
同样的结果@Olivier
标签: php laravel mariadb mysql-regexp