PHP显示来自MySQL的图像BLOB [重复]

Posted

技术标签:

【中文标题】PHP显示来自MySQL的图像BLOB [重复]【英文标题】:PHP display image BLOB from MySQL [duplicate] 【发布时间】:2013-12-31 15:32:30 【问题描述】:

我正在尝试显示存储在数据库的 BLOB 列中的图像;

我使用 SELECT 从数据库中获取数据,不对数据执行任何转换,并使用以下内容显示它(来自唯一输出如下的脚本):

header("Content-Type: image/jpeg");
echo $image;

请注意,chrome 将内容大小显示为图像的正确大小以及正确的 mime 类型 (image/jpeg)。在标题之前没有任何回应,我检查了数据库中的 blob 是否正确。 <?php ?> 标签前后也没有尾随空格。

chrome/IE 显示图像图标,但不显示图像本身。有什么想法吗?

编辑:图像是从数据库中获取的:

$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$row = $sth->fetch();
$image = $row['image'];

var_dump($image) 给出:

string 'ÿØÿà�JFIF��x�x��ÿá�ZExif��MM�*�����������J��������Q�������Q������tQ������t�����† ��±ÿÛ�C�       

ÿÛ�CÿÀ�_"�ÿÄ����������� 
ÿÄ�µ����!1AQa"q2‘¡#B±ÁRÑð$3br‚ 
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³    ´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ��������'... (length=60766)

【问题讨论】:

请发布 $image 的组成部分(即查询等) @user2732663 你试过我下面的答案了吗? 尝试将$image保存到二进制文件并打开,可能是DB中的数据损坏了? 你试过在浏览器中查看源代码吗?有时 PHP 错误或通知会导致输出混乱。 您没有向我们展示插入图像的代码 - 这与检索图像的代码一样重要。 【参考方案1】:

这是我用来显示来自 blob 的图像的方法:

echo '<img src="data:image/jpeg;base64,'.base64_encode($image->load()) .'" />';

【讨论】:

$image 是一个 php 对象吗? 像魅力一样工作!谢谢.. @ProgrammingNewb 您可以将图像数据类型放在 $image 中。它可能是来自 $row["photo"]; 的 PHP 变量 很高兴知道它对你有用,我采取了不同的方法,我在我的服务器中创建了一个文件夹并将所有图像存储在那里,并将图像的链接存储在我的 mysql 数据库中,然后每当我想显示一个图像,调用存储在我的数据库中的链接【参考方案2】:

这样试试吧。

用于插入数据库

$db = new mysqli("localhost", "root", "", "DbName");
$image = file_get_contents($_FILES['images']['tmp_name']);
$query = "INSERT INTO products (image) VALUES(?)";
$stmt = $db->prepare($query);
$stmt->bind_param('s', $image);
$stmt->execute();

用于从 Blob 访问图像

$db = new mysqli("localhost", "root", "", "DbName");
$sql = "SELECT * FROM products WHERE id = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_array();
echo '<img src="data:image/jpeg;base64,'.base64_encode($row['image']).'"/>';

【讨论】:

我想在 html iframe 上显示这个回显。这是怎么做到的? 您好!我真的很感激,但是如果图像是另一种格式会发生什么? @CarlosMontiel,将图像保存到数据库不是一个好习惯。将图像保存在目录上并将其图像名称或路径保存到数据库中以访问该图像。有人问问题,我给出答案。而已。 :) @CarlosMontiel,我不确定,但它也需要适用于其他格式,例如 PNG 或 GIF 等。

以上是关于PHP显示来自MySQL的图像BLOB [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 从 MYSQL 中插入和检索图像 blob?

显示存储为 MySQL 数据库中 BLOB 数据的所有图像

使用PHP加密图像以便在MySQL BLOB中存储然后解密和打印

使用 PHP 显示数据库中的图像 [重复]

使用 javascript 和 websockets 显示来自 blob 的图像

在 JSF 数据表中显示来自 MySQL 数据库的图像 [关闭]