php 图像 blob 不会显示

标签 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

最佳答案

您的代码没有达到您的预期。

尝试改变

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

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

$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['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'])

关于php 图像 blob 不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24632118/

相关文章:

mysql - 用 MySQL 替换 BLOB 文本中的单词

php - PHP const无法正常工作?

javascript - 如何在不使用 Google map 的情况下将当前纬度和经度与折线匹配

php - Codeigniter 3应用程序: update MySQL table column and the corresponding view through Ajax

mysql - 从3个表中获取id

PHP array_diff VS mysql 不在

javascript - 抓取 m3u8 文件的路径

php - 如何在 PHP/Linux 环境中执行一个非常大的 cron

php - HTML 和 PHP 文件之间的动态表单验证。这可能吗?

sql - PostgreSQL:在不依赖外部文件的情况下从 SQL 脚本在大对象中插入字符串