显示图像blob,可能的编码错误

时间:2013-04-18 21:22:19

标签: php mysql blob

我有一个表单,用户可以将图像上传到我的MySQL数据库。该表有三列:idnameimageImage是具有默认设置的blob列。我能够存储图像数据,但是当我获取数据并尝试在网页上显示它时,我只是得到一个损坏的图像(在这种情况下它是一个jpeg文件)。

我怀疑某处编码出了问题。我的upload.php文件以UTF-8编码,没有BOM。这是我的上传代码:

$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中观看了一个关于blob的视频教程,其中blob列具有binary属性。但是,当我尝试创建这样的列时,我收到错误1064.我甚至不知道它与此有任何关系。

1 个答案:

答案 0 :(得分:0)

首先,你不应该使用addslashes()准备好的陈述(这不是你的问题)。

默认情况下,->bindParam()默认为PDO::PARAM_STR,因此您需要指定您传递的数据不是字符串。

尝试:

$insert->bindParam(':image', $image, PDO::PARAM_LOB);

在数据库中存储二进制数据也会导致各种问题。我建议将文件存储到磁盘,只在DB中存储它的路径 - 它有各种各样的优点。