php图像blob不会显示

时间:2014-07-08 12:39:38

标签: php mysql blob

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

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

http://i.imgur.com/NQOPSAf.png

3 个答案:

答案 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()需要存储图像的图像路径。
  • 如果您使用PHP&gt; = 5.4,$query->execute([":id" => $id]); 可以用来代替 $query->execute(array(":id" => $id));