如何使用PHP从mysql显示多个图像(blob)?

时间:2011-04-22 09:05:36

标签: php html mysql image http-headers

我正在尝试使用PHP和MySql数据库显示多个图像,即使使用while循环我也没有得到所有图像,我只得到一个,我的意思是表中的第一个。有什么问题?

我正在使用表ID_IMAGE (int, pk, auto increment)myImage (blob)

$query = mysql_query("SELECT myImage FROM image");
while($data=mysql_fetch_array($query)) {
    header('Content-type: image/jpg');
    echo $data['myImage'];
}

2 个答案:

答案 0 :(得分:12)

解决此问题的一种可能方法是使用单独的脚本来动态输出图像的内容,例如。 :

image.php

header('Content-type: image/jpg');

// DataBase query and processing here...

echo $data['myImage'];

并在需要显示存储在数据库中的图像时调用它,例如。在你的循环中:

echo '<img src="image.php?id=' . $data['id'] . '">';

但是将数据存储在数据库中 会对您的服务器产生影响 ,除非它们非常小或者您有正当理由为此,您应该只将其物理位置存储在磁盘上。

如果您希望隐藏用户的图像位置或控制访问权限,也可以使用此方法,但对于该情况,有更好更快的替代方案。

答案 1 :(得分:1)

只是提到通过编码将图像直接嵌入到html中的可能性,您可以使用:

$query = "SELECT myImage FROM image";
if ($result = mysqli_query($link, $query)) {
    while ($row = mysqli_fetch_assoc($result)) {
        echo '<img src="data:image/jpg;base64,' . base64_encode($row['myImage']) . '">';
    }
}

临:

  • 浏览器无需通过其他网络连接加载图像
  • 您可以在一个请求中查询和显示多个图像

缺点:

  • 如果图像很大和/或图像很多,页面加载会很慢
  • 将图像编码到base64将使其大约增加30%。

有关基本编码图像的更多信息: