在MySQL中保存为BLOB后获取不同的图像

时间:2012-12-05 15:40:13

标签: php mysql blob

我刚刚保存了一张图片(PNG,200x209)

$img = chunk_split(base64_encode(file_get_contents("image.png")));
$sql = "INSERT INTO table (img) VALUES ('$img') WHERE userid = 10";
mysql_query($sql);

(img有MEDIUMBLOB类型)

然后尝试获取它(show.php):

header("Content-type: image/jpeg");

$sql = "SELECT img FROM table WHERE userid = 10 LIMIT 1";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
    $image = base64_decode($row['img']);
}

echo $image;

在请求 show.php 时,它会提供几乎相同的图像,但是具有另一个维度:136x94 =)

为什么会这样?

1 个答案:

答案 0 :(得分:1)

我建议您按原样保存图片。 MySQL的 BLOB数据类型专门用于二进制数据。这个图像是一个二进制文件。并删除base64编码。它只会增加数据大小。

在代码中,您正在保存png图像但输出jpeg。两种内容类型都应该相同。

所以插入代码就是这样的,

$img = file_get_contents("image.png");
$sql = "INSERT INTO table (img) VALUES ('$img') WHERE userid = 10";
mysql_query($sql);

并将其显示为

header("Content-type: image/png");

$sql = "SELECT img FROM table WHERE userid = 10 LIMIT 1";
$res = mysql_query($sql);
echo mysql_result($res, 0);