Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取错误';重复运算符操作数无效';来自regexp_Php_Mysql - Fatal编程技术网

Php 获取错误';重复运算符操作数无效';来自regexp

Php 获取错误';重复运算符操作数无效';来自regexp,php,mysql,Php,Mysql,我有一个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.dele

我有一个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\u搜索前加上反斜杠,但是没有用。我还尝试在PhpMyAdmin中直接运行上面的mySQL查询,结果产生了相同的错误

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

本部分PHP搜索代码如下:

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

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

请参阅,这就是生成的原因。
()*
块不应该是
(*)
?我很确定您不能将重复运算符
*+
应用于捕获组
()
,这似乎与错误消息相符。。。(在一些聪明的亚历克说这句话之前,是的,显然你可以在捕获组中应用它们,但这不是我要说的重点,你很清楚;-)这为我解决了:$keywords\u search=str\u replace(“,”,$keywords\u search);好像我的代码被删掉了。替换的是点通配符的通配符。我把你的答案读了大约10遍,最后得出了以下代码。你猜怎么着?成功了!非常感谢你。下面是代码,如果有人想知道,我希望它是正确的,但它对我有效->$keywords\u search=str\u replace(“,”,$keywords\u search);好像我的代码被删掉了。替换为点通配符的通配符。编辑您的注释,在注释周围添加代码,如帖子中的内联代码:`
like so
`