php图像块不会显示

php图像块不会显示,php,mysql,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

因此,我试图显示来自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"];
    }
?>

您的代码没有达到预期效果

尝试改变

$q = $db->prepare("SELECT image FROM products WHERE id = '$id'");
in-如果
id
字段为数字字段;如果不是,则添加单引号-

$q = $db->prepare("SELECT image FROM products WHERE id = $id");
当您传递给query
$id
占位符而不是他的值时,您的示例不起作用(您无法连接它)

当然,使用这种方法根本不能保存,所以应该这样使用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'>;
试着替换

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

试试看

要为图像提供服务,请使用

$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(数组(“:id”=>$id))

您确定所有图像都是jpeg类型吗?图像的大小是多少?您是否尝试从某个(文本/十六进制)编辑器打开图像文件?我认为您对如何使用准备好的语句有误解。在SQL中使用准备好的占位符,不要在那里使用用户输入。用户输入应该转到
execute()
。我确信图像是jpeg格式的,是的,我只是用手掌捂住准备好的语句。我建议您使用占位符,而不是将用户输入输入准备好的SQL语句。不管它是否逃脱。因此,将其更改为
$q=$db->prepare(“从id=:id的产品中选择图像”)
$q->execute(数组(“:id”=>$id))@vhu:你完全正确,我只是建议OP如何让他的代码工作。。。我正在整合我的答案,而我的手机开始响:)谢谢你的回答。我尝试了修复,但出现了相同的错误。@user3511194:我们应该知道url是如何编码到db中的。。。也许是相对的,所以你的“回声”在那里是不够的…好吧。我怎样才能看到url?这对我不起作用。我得到了错误:警告:readfile()希望参数1是一个有效路径,字符串在第17行的C:\xampp\htdocs\haugaard\image.php中给出,这是因为
readfile
需要图像位置的确切路径。
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']);