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

我使用SELECT从数据库中获取数据,不对数据进行任何转换,并使用以下内容(来自仅输出以下内容的脚本):

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


请注意,chrome正在将内容大小显示为图像的正确大小和正确的大小MIME类型(image/jpeg)。在标头和ive检查数据库中的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Ñðbr‚ 
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³    ´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ��������'... (length=60766)


评论

请发布构成$ image的内容(例如查询等)

@ user2732663您是否在下面尝试了我的答案?

尝试将$ image保存到二进制文件中并打开它,也许DB中的数据已损坏?

您是否尝试过在浏览器中查看源代码?有时,PHP错误或通知会使输出混乱。

您尚未向我们展示插入图像的代码-与检索图像的代码一样重要。

#1 楼

像这样尝试。

用于插入数据库

$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$image = addslashes(file_get_contents($_FILES['images']['tmp_name']));
//you keep your column name setting for insertion. I keep image type Blob.
$query = "INSERT INTO products (id,image) VALUES('','$image')";  
$qry = mysqli_query($db, $query);


从Blob访问图像

$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$result=mysqli_fetch_array($sth);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';


希望对您有帮助。

谢谢。

评论


您能否举个例子,您如何从Ajax调用中获取mysql查询的用户ID(“ SELECT * FROM products WHERE id = $ id”)?我真的会很感激。

–diank
2015年11月11日19:13

你是救生员

–新莫里纳
17年5月31日上午10:10

我想在html iframe上显示此回显。该怎么做?

–Sarah_Salar
19年11月29日在5:24

我很欣赏这个!

– Premlatha
19/12/13在2:58



你好!我真的很感激,但是如果图像是另一种格式怎么办?

–卡洛斯·蒙蒂尔(Carlos Montiel)
9月26日6:37

#2 楼

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

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


评论


是$ image一个php对象吗?

–Kebab程序员
15年11月29日在18:53

像魅力一样工作!谢谢.. @ProgrammingNewb,您可以将图像数据类型放入$ image中。它可以是$ row [“ photo”]中的PHP变量;

– Moxet Khan
16年5月24日在6:08

很高兴知道它对您有用,我采取了另一种方法,我在服务器中创建了一个文件夹,并将所有图像存储在那里,并且将图像的链接存储在mysql数据库中,然后每当我要显示图像时,都调用存储在我的数据库中的链接

–Kebab程序员
16年5月25日在13:18

#3 楼

由于必须在blob字段/列中存储各种类型的内容,因此我想像这样更新代码:

echo "data: $mime" $result['$data']";


其中:
mime可以是任何类型的图像,文本,Word文档,文本文档,PDF文档等。数据库中的内容数据类型为blob

评论


您的语法正确吗?

–brown.cn
12月15日17:27