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