ユーザーが画像を MySQL データベースにアップロードできるフォームがあります。テーブルには 、 、 の 3 つの列がid
ありname
ますimage
。Image
デフォルト設定の BLOB 列です。画像データを保存することはできますが、データを取得して Web ページに表示しようとすると、画像が壊れてしまいます (この場合は jpeg ファイルです)。
どこかでエンコーディングに問題があったと思われます。私の upload.php ファイルは BOM なしの UTF-8 でエンコードされています。これは私のアップロードコードです:
$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
$image_name = addslashes($_FILES['image']['name']);
$insert = $conn->prepare('INSERT INTO images VALUES(:id,:name,:image)');
$insert->bindValue(':id', '');
$insert->bindParam(':name', $image_name);
$insert->bindParam(':image', $image);
$insert->execute();
そして、これが私が画像を表示しようとする場所です。
$select = $conn->prepare('SELECT image FROM images WHERE id = 2');
$select->execute();
$display = $select->fetch();
echo '<img src="data:image/jpg;base64,' . base64_encode( $display['image'] ) . '" />';
MySQL のブロブに関するビデオ チュートリアルを見ました。ここでは、ブロブ列にbinary
属性がありました。しかし、そのような列を作成しようとすると、エラー 1064 が発生します。これと関係があるかどうかさえわかりません。