从regexp获得错误'重复 - 运算符操作数无效'

时间:2012-05-03 15:57:00

标签: php mysql

我有一个PHP / mySQL搜索脚本,由于某些原因,在开发人员的最新更新之后,在使用通配符(*)进行搜索时停止了工作。更糟糕的是,它不仅停止了工作,而且还返回了以下令人讨厌的(对于访问者)mySQL错误,这是基于 donut 通配符搜索:

SELECT a.product_id, a.category_id FROM products a
LEFT JOIN users u ON u.userid=a.ownerid
WHERE a.active=1 AND a.approved=1 AND a.deleted=0 AND a.creation_in_progress=0
AND a.name LIKE '%%' 
AND ((a.name REGEXP '( )*(*donut*)( )*') OR (a.description REGEXP '( )*(*donut*)( )*'))

错误:

Mysql Error: Got error 'repetition-operator operand invalid' from regexp

不幸的是,开发人员不能(或不会)修复它,如果有人进行通配符搜索,它会使我的网站无效。

任何想法可能是什么问题?还是一个简单的修复?我已经尝试在$ keywords_search之前加一个反斜杠但是没有用。我也尝试直接在PhpMyAdmin中运行上面的mySQL查询,它产生了同样的错误。

我也试图完全摆脱REGEXP部分,但它根本不会返回任何结果。

这部分的PHP搜索代码如下:

$query[] = "((a.name REGEXP '( )*(" . str_replace(' ', ')*( )*(', $keywords_search) . ")( )*') 
OR (a.description REGEXP '( )*(" . str_replace(' ', ')*( )*(', $keywords_search) . ")( )*'))";      

1 个答案:

答案 0 :(得分:2)

如果你希望它与明星相匹配,你想逃离你的星星(*)。如果您希望它翻译“任何字符串”,则需要将其更改为.*。就这么简单。只需获取用户的输入并在查询数据库之前对其应用替换。