5

DBへの画像の保存に関するこのチュートリアルを読みました。チュートリアルでは、作成者は挿入する前にバイナリデータの特殊文字をエスケープします:http ://www.phpriot.com/articles/images-in-mysql/7 (使用することをお勧めしますaddslashesmysql_real_escape_string、これは別の問題です)。

重要なのは、表示するとき、彼は保存されているデータを表示するだけです:http ://www.phpriot.com/articles/images-in-mysql/8

私の質問:

1)バイナリフィールドタイプ()の場合でも、特殊文字をエスケープする必要がありblobますか?

2)その場合、画像を正しく表示するために、文字を再度「エスケープ解除」する必要はありませんか?(もしそうなら、それを行うための最良の方法は何ですか。効率についてのコメントはありますか?大きな画像の場合:エスケープとエスケープ解除は大きなオーバーヘッドになる可能性がありますか?)

それとも、エスケープについての私の理解が完全に間違っているということですか(そして、エスケープはクエリにのみ影響し、挿入/保存された最終データには影響しませんか?)。

ありがとう

JP

4

2 に答える 2

6

逃げることに対するあなたの理解は間違っています。データベースに挿入されるデータはエスケープされるため、クエリ パーサーは意図したとおりに情報を認識します。

「ジャン=リュック 'アール グレイ' ピカード」という文字列を見てみましょう。エスケープすると、次のようになります。'Jean-Luc \'Earl Grey\' Picard'

MySQL はこれを受け取ると、エスケープされた引用符を文字どおりに解釈する必要があることを理解し、それがエスケープの意味であり、それらをデータベースに格納します。エスケープ文字はデータベースに保存されません。\ は、MySQL に対して、その後に続く文字をそのまま受け取る必要があることを示します。

取得時には、クエリの解析時にエスケープ文字が削除されるため、データはエスケープ文字なしでアプリケーションに表示されます。

于 2010-12-31T11:31:09.450 に答える
2

1) バイナリ フィールド タイプ (blob) でも特殊文字をエスケープする必要がありますか?

はい、mysql_real_escape_string()(実際に使用するものです)SQLインジェクション攻撃に対する保護を提供するため、イメージファイル内にも簡単に侵入できます。データベースに入力する任意のデータは、最初にサニタイズする必要があります。

于 2010-12-31T11:27:43.550 に答える