ホームページ >バックエンド開発 >PHPチュートリアル >PHP コードが MySQL BLOB 列にイメージを挿入できないのはなぜですか?

PHP コードが MySQL BLOB 列にイメージを挿入できないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 09:33:11215ブラウズ

Why is my PHP code failing to insert images into a MySQL BLOB column?

PHP を使用した MySQL データベースへの BLOB の挿入: イメージ ストレージのトラブルシューティング

MySQL データベース内にイメージを保存しようとすると、問題が発生する可能性があります提供されたクエリがデータを正しく保存できない場合。問題を詳しく調べて、考えられる解決策を検討してみましょう。

問題:

列 ImageId (integer) と Image (longblob) を含む提供されたテーブル構造がある場合、次のクエリは次のとおりです。利用されました:

$sql = "INSERT INTO ImageStore(ImageId,Image)               
VALUES('$this->image_id','file_get_contents($tmp_image)')";

から期待された結果が得られたにもかかわらずfile_get_contents($tmp_image) の値を出力するとき、データはデータベースに保存されていません。

解決策:

解決策 1: 変数補間

あなたが作成したクエリは、PHP の一般的な落とし穴の影響を受けやすいです。変数 file_get_contents($tmp_image) を二重引用符で囲まれた文字列内に埋め込んだ場合、PHP は関数を自動的に実行しません。代わりに、これをリテラル文字列として扱うため、戻り値ではなく「file_get_contents($tmp_image)」がデータベースに書き込まれます。

file_get_contents($tmp_image) の結果を正しく連結するには、以下を行う必要があります。二重引用符で囲まれた文字列を終了します:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";

解決策 2:サニタイズ

バイナリデータに一重引用符 (') が含まれている場合、クエリは無効になります。これを防ぐには、データを挿入する前に mysql_escape_string を使用してデータをサニタイズします。

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";

解決策 3: 代替ストレージ

リレーショナル データベースにラージ バイナリ データ (BLOB) を格納すると、非効率的になる。バイナリ データ管理用に設計された個別のファイルやクラウド ストレージ サービスなどの代替ストレージ オプションを検討してください。

以上がPHP コードが MySQL BLOB 列にイメージを挿入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。