PHP 显示来自 MySQL 的图像 BLOB

标签 php mysql

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

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

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

请注意,chrome 将内容大小显示为图像的正确大小以及正确的 mime 类型 ( image/jpeg )。在 header 之前没有任何回显,并且我检查了数据库中的 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)

最佳答案

像这样尝试一下。

用于插入数据库

$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']).'"/>';

关于PHP 显示来自 MySQL 的图像 BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842207/

相关文章:

php - 如何在 PHP 中修复格式错误的 JSON?

php - 使用 php imagick 库创建二维码图像

php - 将测试用例输入 TestRail

php - 数据库复杂 3 路连接查询

javascript - 弹出窗口 f3 在 google chrome 中打开但在前面不可见

php - mysql_affected_rows 返回 0

php - 使用表锁防止并行执行 (MySQL)

java - 使用问题?从 Java 更新时用于 MySQL 存储过程的通配符

php - GROUP_CONCAT 为 0 个结果返回 1 行

mysql - 如何在MySQL中合并重叠的日期范围?