2012-05-03 9 views
0

何らかの理由で、開発者による最新の更新後にワイルドカード(*)で検索するときに機能しなくなった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) . ")()*'))";  
+0

これが[VCS](http://en.wikipedia.org/wiki/Revision_control)が作成された理由です。 –

+0

'()*'ブロックは '(*)'でなければなりませんか?私は...あなたはエラーメッセージを表示して集計しているようだどの ')('繰り返し演算子は、 '* +'グループをキャプチャするために適用することはできません確信している(といくつかのスマートアレックはそれを言う前に、はい、明らかにあなたがそれらを適用することができます* 「*」 $ keywords_search = str_replace(「*」、$のkeywords_search):*キャプチャグループ内で、しかし、これは私のためにそれを固定) – DaveRandom

+0

;-)それは私が作っていた時点ではなかったとも、あなたはそれを知っています; – user1227914

答えて

2

は、あなたはそれが文字通りの星を一致させたい場合は、あなたの星(*)を脱出したいです。 「任意の文字列」を翻訳する場合は、.*に変更する必要があります。それは簡単です。データベースを照会する前に、ユーザーの入力を受け取り、置換を適用するだけです。

+0

私はあなたの答えを約10回読んで、次のコードを思いついた。そして、何を推測する?出来た!どうもありがとうございます。ここでは誰もが疑問に思っているならば、私はそれが正しいのですが、それは私の作品を願っていたコードだ - > $ keywords_search = str_replace(「*」「*」、$のkeywords_search)は、 – user1227914

+0

何とか私のコードが削除されたようです。置き換えはドットワイルドカードのワイルドカードです。コードを追加する – user1227914

+1

編集あなたのコメントは、ポスト内のインラインコードのようなダニでそれを囲む: '' 'so'のように –

関連する問題