予約された文字が含まれているために構文エラーの原因となる文字が含まれているクエリがあり、文字列を正しくエスケープする方法を理解するために戦っています。予約された文字をエスケープするWHERE ... MATCH ... AGAINST ...ステートメント?
SELECT * FROM `products`
WHERE MATCH (code, description)
AGAINST (UPPER(+("intel"*) +("cpu"*)) IN BOOLEAN MODE)
しかし、私はこのクエリを実行すると、私は次のエラーを取得する:
クエリがある
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') +("cpu"*))) IN BOOLEAN MODE)' at line 1
オーケー、それはそのAGAINST
示すだろうと、それは)
を好きではないので、細かいですしかし、それは(まだ)ではありません。だから私はバックスラッシュでエスケープしようとしましたが、それでも同じエラーがスローされます。
PHPで準備文を使って試してみると、検索文字列+("intel"*) +("cpu"*)
がステートメントにバインドされています。だから、それはそれがエスケープする方法はバックスラッシュではない、または何か他のものがないようです。
だから私はmysqlescapestringのためにPHPのドキュメントを見ていたし、私はそれことを見た:「次の文字の前に付加するバックスラッシュ:\のX00、\ nは、\ rを、\、」、 "。と\ X1A"
単一引用符と二重引用符をエスケープする必要があると私はこれを実行しようとしましたが、それはちょうど同じ構文エラーがスローされますが、二重引用符で、すなわちto use near '\"intel\"*\)...
私はそれが最善だろうと理解していることを示す
準備されたステートメントを使用して、これが問題を解決するが、私はここで間違っていることを理解したい、そして私が行ったようにAGAINST
節の中でこのような文字列をどのようにエスケープできるかを知りたいここに。
誰かが私がこれで間違っている場所を示唆することができれば、それは非常に高く評価されます。ありがとうございました。
正確にAGAINST()のパラメータになりたいですか? – e4c5
@ e4c5お返事ありがとうございます。私がこの質問を理解するなら、 'INTEL'と' CPU'で始まる言葉を含むもの。前述のように、これは動作しますが、私がPHPで準備している場合にのみ、エスケープしていますが、エスケープされていることとその動作を正確には分かりません。私は準備されたステートメントに次のパラメータを渡します: '+(" intel "*)+(" cpu "*)' –