从sql显示图像

时间:2012-06-01 12:50:04

标签: php sql blob

我创建了一个表格,我通过“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);

                ?>

5 个答案:

答案 0 :(得分:1)

将图像保存到数据库不是一个好主意,但如果你认为你需要这样,那么你可以从数据库表中检索数据,将其编码为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" />';

答案 1 :(得分:0)

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

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

答案 2 :(得分: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服务器访问),并将文件的路径存储在数据库中。

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

关于存储blob与在磁盘上存储图像文件的路径的争论一再争论不休。 Microsoft提供了一份研究论文,比较了每个here的优缺点。话虽如此,要将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();