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
残念ながら、開発者はそれを修正できない (または修正しない) ため、誰かがワイルドカード検索を行うと、私の Web サイトが役に立たなくなります。
問題の可能性はありますか?それとも簡単な修正?$keywords_search の前にバックスラッシュを入れようとしましたが、うまくいきませんでした。上記の mySQL クエリを PhpMyAdmin で直接実行しようとしたところ、同じエラーが発生しました。
また、REGEXP 部分を完全に取り除こうとしましたが、結果がまったく返されません。
この部分の PHP 検索コードは次のとおりです。
$query[] = "((a.name REGEXP '( )*(" . str_replace(' ', ')*( )*(', $keywords_search) . ")( )*')
OR (a.description REGEXP '( )*(" . str_replace(' ', ')*( )*(', $keywords_search) . ")( )*'))";