ホームページ > データベース > mysql チュートリアル > PHP を使用して画像 BLOB を MySQL に適切に挿入するにはどうすればよいですか?

PHP を使用して画像 BLOB を MySQL に適切に挿入するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-26 15:53:09
オリジナル
208 人が閲覧しました

How to Properly Insert Image Blobs into MySQL Using PHP?

PHP を使用した MySQL データベースへの BLOB の挿入

MySQL データベースにイメージを保存する必要がある場合、問題が発生する可能性があります。テーブル構造は次のとおりです:

mysql> describe ImageStore;
+---------+----------+------+-----+---------+-------+
| Field   | Type     | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| ImageId | int(11)  | NO   | PRI | NULL    |       |
| Image   | longblob | NO   |     | NULL    |       |
+---------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
ログイン後にコピー

次のクエリは画像を挿入しようとしますが、予期したバイナリ データの保存に失敗します:

$tmp_img = $this->image['tmp_name'];
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
mysql_query($sql); 
ログイン後にコピー

問題は関数の連結にあります。文字列内で file_get_contents($tmp_image) を呼び出します。 PHP の変数補間は変数に対してのみ機能し、関数呼び出しには機能しません。ここでは 3 つの解決策を示します:

解決策 1: 明示的な連結を使用する:

$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
ログイン後にコピー

解決策 2: MySQL のバイナリ データをサニタイズするクエリ:

$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
ログイン後にコピー

注: 可能であれば、大きな画像を MySQL データベースに保存しないことをお勧めします。

以上がPHP を使用して画像 BLOB を MySQL に適切に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート