我有一个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) . ")( )*'))";
答案 0 :(得分:2)
如果你希望它与明星相匹配,你想逃离你的星星(*
)。如果您希望它翻译“任何字符串”,则需要将其更改为.*
。就这么简单。只需获取用户的输入并在查询数据库之前对其应用替换。