PHP显示来自MySQL的BLOB图像

use*_*663 42 php mysql

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

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

header("Content-Type: image/jpeg");
echo $image;
Run Code Online (Sandbox Code Playgroud)

请注意,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'];
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

Riz*_*ani 115

试试这样.

用于插入DB

$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);
Run Code Online (Sandbox Code Playgroud)

用于从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'] ).'"/>';
Run Code Online (Sandbox Code Playgroud)

希望它会对你有所帮助.

谢谢.


Ari*_*osh 13

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

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