1

別の頭の体操。

これは通常の「しかし、アポストロフィがクエリを壊している」ということではありません。エスケープとサニタイズについてはすべて知っているので、それも正しく理解します。

多くのものが「Assassin's」や「Babe's」などの名前でデータベースに保存され、最終的には「Assassin\'s」および「Babe\'s」になります。回復は良いですが、テキストによる検索は... 面倒です.

LIKE "%Babe\'s%" には結果がありません。"%Babe\\'s" には結果がありません。"%Babe\''s" には結果がありません。

しかし、サーバーに直接アクセスすると、すべて結果が生成されます。

つまり、まったく編集されていない SAME クエリは、MySQL エンジンで直接機能しますが、php の mysql API 経由で送信されると、一致する結果は生成されません。

これを引き起こす可能性のあるアイデアはありますか?(スラッシュの量などを100回確認しましたが、文字セットの問題はありますか?」

多くの多くの多くの多くの前もって感謝します。

編集:

私は自分自身をより明確にするほうがよいと思います:

"SELECT title FROM games WHERE title LIKE "%assassin\\\'s%";(SQL はアポストロフィーをエスケープし、スラッシュの 1 つが格納されたスラッシュに変わるため、この例では「Assassin\'s Creed」を探しているため)

edit2:これは、サニタイズが不十分なために実際のデータベースでエスケープされたことが原因であることがわかりました。現在、データベースと入力メソッドをクリーンアップしようとしています。

edit3:魔法の引用符が何らかの形でオンになっているようです...オフにされたことを誓います! しかし、それだけではありませんでした。このサイト用に用意されている DB ラッパーには、問題の原因となったクリーン イベントとプレクリーンがあります。それは現在修正されており、現在、スクリプトを実行して(うまくいけば)データベースをクレンジングしています...

4

5 に答える 5

5

データベースのデータを修正することを真剣に検討します。

そうは言っても、MySQL は と の両方\'''エスケープされたアポストロフィとして認識します。つまり、厳密な SQL を使用するようにサーバー モードが設定されていない限り、その場合のみ''認識されます。

ほとんどの場合、ユーザーがデータを入力したとき (magic_quotes_gpcを使用するaddslashes) と、それmysql_real_escape_stringを呼び出すときに によって、データが二重にエスケープされます。

これは になりAssassin's CreedAssassin\\\'s Creed最終的には として保存されAssassin\'s Creedます。

magic_quotes_gpc可能であれば無効にすることを強くお勧めします。修正するよりも多くの問題を引き起こすためです。

于 2010-06-21T19:42:12.793 に答える
1

MySQL に格納できるようにアポストロフィをエスケープすると、バック スラッシュは格納されません。

だからこれを試してください:

SELECT title FROM games WHERE title LIKE "%assassin\'s%";

それ以外の:

SELECT title FROM games WHERE title LIKE "%assassin\\\'s%";
于 2010-06-21T17:26:49.820 に答える
1

mysql_real_escape_stringを使用しようとしましたか?また、magic_quotes が有効になっているかどうかを確認し、文字列をいじっていますか?

于 2010-06-21T17:06:46.440 に答える
0

SELECT title FROM games WHERE title REGEXP "assassin \'s";

REGEXPは、MySqlのより強力で、扱いにくい「LIKE」と考えてください。すべてではなく、ショップのもう1つのクールなツールです。

于 2010-06-21T19:25:12.567 に答える
-1

ドキュメントにあるように、LIKE 句と REGEXP 句のスラッシュは 2 つにする必要があります

編集:間違ったリンクを修正

于 2010-06-22T10:03:48.130 に答える