2

我创建了一个表格,我通过“BLOB”保存了图像。我需要将这些图像与其他项目一起展示。但我不知道如何在同一页面中同时显示这些图像。这是我的 php 代码,它以表格的形式显示其他内容。同样,我想相应地显示图像。有什么帮助吗?

<?php
                $display_query = mysql_query("SELECT * FROM eportal");

                    echo "<table id='pageTable'><thead><tr><th>Item code</th><th>Description</th><th>Cost</th></tr></thead>";
                    echo "<tbody>";
                    while($row = mysql_fetch_array($display_query)){
                        print "<tr><td>".$row['itemid']."</td><td>".$row['description']."</td><td>";
                        print "&#8377;".$row['cost']."</td></tr>";
                    }
                    echo "</tbody>";
                    echo "</table>";
                    mysql_close($connection);

                ?>
4

5 回答 5

2

将图像保存到数据库不是一个好主意,但如果您认为需要这种方式,那么您可以从数据库表中检索数据,将其编码为 base64(http://php.net/base64_encode),然后在 HTML以这种方式打印:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

使用 PHP 你会写:

echo '<img src="data:'.$image_mime_type.';base64,'.base64_encode($image_data_from_db).'" alt="My image alt" />';
于 2012-06-01T13:03:40.180 回答
0

读取 Blob 数据并将其写入具有标题类型图像的文件中。并尝试打印它,它应该显示图像文件。

是的,在数据​​库中保存图像或任何文件确实是一个坏习惯,因为您正在增加数据库大小并且它也会降低性能。我建议您尝试将 Blob 转换为图像,但不要应用于您的工作。只需将图像保存在所需位置,并将其位置路径保存到数据库中,以便下次获取和保存。

于 2012-06-01T13:00:08.597 回答
0

正如其他人提到的,将图像存储在数据库中通常是一个坏主意。

图像不会在HTTP与另一个页面数据相同的响应中传输。

要显示数据库中的图像,您需要实现一个脚本,在给定项目 ID 的情况下,该脚本将读取该字段并发送图像的二进制数据;并在您的表单中提供脚本的路径<img src="">

while($row = mysql_fetch_array($display_query)){
    print "<tr><td>".$row['itemid']."</td><td>".$row['description']."</td><td>";
    print "&#8377;".$row['cost']."</td><td>";
    print "<img src=\"image.php?id=".$row['id']."\"></td></tr>";

}

image.php是另一个脚本,它输出image_blob给定的eportal.id. 您还需要在标题中提供正确的大小和 mime 类型。

您最好将图像存储在一个文件中(可由 Web 服务器访问)并将文件的路径存储在数据库中。

于 2012-06-01T13:00:22.117 回答
0

如果您仍想将图像保存在数据库中,您将需要第二个脚本,该脚本将从数据库中获取这些图像并将它们传递给具有正确标题的浏览器。

header("Content-type: image/jpeg");
# 
# Replace this with database read:
# readfile('myimage.jpg');

此外,您将需要存储您使用的图像类型。JPEG、GIF 或 PNG 文件会有不同的标题。

于 2012-06-01T13:00:24.320 回答
0

存储 blob 与在磁盘上存储图像文件路径的争论已被反复争论。Microsoft在此处提供了一份研究论文,比较了每种方法的优缺点。话虽如此,要将 blob 显示为图像,您需要调用单独的页面并输出标头信息,告诉浏览器存储的图像类型。

例如:

connectToDatabase();

$sql = "SELECT image_blob FROM eportal;";

$result = mysql_query($sql) or die(mysql_error());  
$row = mysql_fetch_array($result);

header("Content-type: image/jpeg");
echo $row['image_blob'];
$db->close();
于 2012-06-01T13:01:51.377 回答