2010-12-31 7 views
4

DBに画像を保存する方法についてのチュートリアルを読んでいます。チュートリアルでは、著者はhttp://www.phpriot.com/articles/images-in-mysql/7mysql_real_escape_stringが好ましいが、addslashesを使用しているが、それは別の問題である)を挿入する前にバイナリデータの特殊文字をエスケープします。PHP - Mysql:DBに画像を保存する - 特殊文字をエスケープする

ポイントが表示するときに、それが保存されているように、彼は単にデータを表示し、次のとおりです。http://www.phpriot.com/articles/images-in-mysql/8

私の質問:

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

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

エスケープに関する私の理解は完全に間違っています(エスケープするとクエリにのみ影響し、最終的なデータは挿入/保存されません)。

JP

答えて

5

エスケープについての理解は間違っています。データベースに挿入されているデータはエスケープされ、クエリーパーサーは情報を意図したとおりに表示します。

「Jean-Luc 'Earl Gray' Picard」という文字列を使用してください。 エスケープすると、'Jean-Luc \'Earl Grey\' Picard'

が返されます。エスケープされたクォートは、エスケープすることを意味し、データベースに格納されます。エスケープ文字はデータベースに格納されません。 \は文字通りそれに続く文字を取るべきであることをMySQLに示す。

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

+0

ありがとう!疑いを解決する。 –

+0

あなたは大歓迎です:) – kander

1

おかげで)私たちも、バイナリフィールドタイプ(BLOB)用の特殊文字をエスケープする必要がありますか?

はい、(実際に使用する1つである)mysql_real_escape_string()ので、簡単に同様の画像ファイル内とすることができるSQLインジェクション攻撃に対する保護を提供します。 データベースに入力する任意のデータは、まずサニタイズする必要があります。

+0

ありがとうございます。私たちはそれを表示する前にエスケープする必要があると思いますか?そして効率性についての考えは?このエスケープ・アンエスケープのせいで、画像サムネイルをデータベースに保存するかどうか再検討しています。 –

+0

@ JP19ディスカッションのためにhttp://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nayを参照してください –

関連する問題