0

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

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) . ")( )*'))";      
4

1 回答 1

2

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

于 2012-05-03T16:00:38.247 回答