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

残念ながら、開発者はそれを修正できない (または修正しない) ため、誰かがワイルドカード検索を行うと、私の Web サイトが役に立たなくなります。

問題の可能性はありますか?それとも簡単な修正?$keywords_search の前にバックスラッシュを入れようとしましたが、うまくいきませんでした。上記の mySQL クエリを PhpMyAdmin で直接実行しようとしたところ、同じエラーが発生しました。

また、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 に答える