所以我试图从我的mysql数据库中显示一个图像。图像保存为blob格式。我制作了单独的php文件来获取图像。然后我从我想要显示图像的地方调用这个文件:
<img src="image.php?id=3" />
这是获取图片的文件:
<?php
require 'scripts/connect.php';
if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
$q = $db->prepare("SELECT image FROM products WHERE id = '$id'");
$q->execute();
$data = $q->fetch();
header("content-type: image/jpeg");
echo $data["image"];
}
?>
但是当我尝试运行此代码时,没有图像显示出来。相反,我得到了这个烦人的破坏链接图像的事情:
答案 0 :(得分:1)
您的代码没有达到预期效果。
尝试更改
$q = $db->prepare("SELECT image FROM products WHERE id = '$id'");
in - 如果id
字段是数字字段;如果不是,请添加单引号 -
$q = $db->prepare("SELECT image FROM products WHERE id = $id");
你传递给查询$id
占位符时,你的例子没有用,而不是他的价值(你没有把它连接起来)
当然,使用这种方法你根本不会SQL Injection保存,所以你应该使用pepared语句
$q = $db->prepare("SELECT image FROM products WHERE id = :id");
$q->execute(Array(":id" => $id));
OP告诉我$ data [&#39; image&#39;];是一个比特流,我建议使用类似的东西:
echo '<img src="data:image/jpg;base64,'. base64_encode($data['image']). '" alt='imagename'>;
或者您的回音直接进入src
属性:
echo 'data:image/jpg;base64,'. base64_encode($data['image'])
答案 1 :(得分:0)
尝试替换
header("content-type: image/jpeg");
与
header("content-type: image/png");
答案 2 :(得分:0)
尝试,
$query = $db->prepare("SELECT image FROM products WHERE id = :id");
$query->execute(array(":id" => $id));
$data = $q->fetch();
要提供图像,请使用
$mime = pathinfo($data['image'], PATHINFO_EXTENSION);
header('Content-Type: '.$mime);
ob_clean();
flush();
readfile($data['image']);
注意:
readfile()
需要存储图像的图像路径。$query->execute([":id" => $id]);
可以用来代替
$query->execute(array(":id" => $id));