何らかの理由で、開発者による最新の更新後にワイルドカード(*)で検索するときに機能しなくなったPHP/mySQL検索スクリプトがあります。さらに悪い何、それが動作を停止するだけでなく、ドーナツワイルドカード検索に基づいており、次の厄介な(訪問者のための)MySQLエラー、返す:regexpから 'repetition-operator operand invalid'というエラーが発生しました
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) . ")()*'))";
これが[VCS](http://en.wikipedia.org/wiki/Revision_control)が作成された理由です。 –
'()*'ブロックは '(*)'でなければなりませんか?私は...あなたはエラーメッセージを表示して集計しているようだどの ')('繰り返し演算子は、 '* +'グループをキャプチャするために適用することはできません確信している(といくつかのスマートアレックはそれを言う前に、はい、明らかにあなたがそれらを適用することができます* 「*」 $ keywords_search = str_replace(「*」、$のkeywords_search):*キャプチャグループ内で、しかし、これは私のためにそれを固定) – DaveRandom
;-)それは私が作っていた時点ではなかったとも、あなたはそれを知っています; – user1227914