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 サイトの他の関連記事を参照してください。