PHP图像blob不会显示


php image blob wont show

所以我试图从我的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"];
    }
?>

但是当我尝试运行此代码时,没有图像显示。相反,我得到了这个烦人的坏链接图像:

https://i.stack.imgur.com/LGGTF.png

你的代码不符合你的预期。

尝试更改

$q = $db->prepare("SELECT image FROM products WHERE id = '$id'");

in - if id字段为数字1;如果不是,添加单引号-

$q = $db->prepare("SELECT image FROM products WHERE id = $id");

你的例子没有工作,因为你正在传递查询$id占位符,而不是他的值(你没有连接它)

当然,这种方法根本不需要SQL注入来保存,所以你应该这样使用预处理语句

$q = $db->prepare("SELECT image FROM products WHERE id = :id");
$q->execute(Array(":id" => $id));
<标题>编辑

OP告诉我$data['image'];如果是位流,我建议使用如下格式:

echo '<img src="data:image/jpg;base64,'. base64_encode($data['image']). '" alt='imagename'>;

或者如果您的echo直接进入src属性:

echo 'data:image/jpg;base64,'. base64_encode($data['image'])

尝试替换

header("content-type: image/jpeg");

header("content-type: image/png");

试试,

$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()需要图像路径到存储图像的位置。
  • 如果你使用PHP>= 5.4, $query->execute([":id" => $id]);可以用代替吗$query->execute(array(":id" => $id));