来自mysql数据库的图像不会显示在浏览器中

时间:2011-05-06 19:19:59

标签: php mysql image pdo blob

我正在尝试显示存储在MySql数据库中的图像。

我有下表

CREATE TABLE `Pictures` (
`Id` varchar(36) character set utf8 NOT NULL,
`Name` varchar(100) character set utf8 NOT NULL,
`Type` varchar(25) character set utf8 NOT NULL,
`Size` varchar(25) character set utf8 NOT NULL,
`Picture` mediumblob NOT NULL,
PRIMARY KEY  (`Id`)
) ENGINE=InnoDB;

php代码具有以下结构

Repostory
- 服务
- - Image.php

存储库

public static function GetPictureById($id) 
{
    global $db;
    $d = $GLOBALS["db"];
    $result = $d->prepare("SELECT * FROM Pictures WHERE id = :id");
    $result->bindParam(":id", $id, PDO::PARAM_STR, 36);

    if($result->execute() !== true)
    {
        Pre($result->errorInfo());
        return;
    }

    $result->bindColumn("Id", $id);
    $result->bindColumn("Type", $type);
    $result->bindColumn("Size", $size);
    $result->bindColumn("Picture", $picture, PDO::PARAM_LOB);
    while($result->fetch(PDO::FETCH_BOUND)) 
    {
        $pic = new Picture();
        $pic->SetId($id);
        $pic->SetType($type);
        $pic->SetSize($size);
        $pic->SetPicture($picture);
    }

    return $pic;
}

服务

public static function GetPictureById($id) 
{
    return PictureRepository::GetPictureById($id);
}

Image.php

error_reporting(E_ALL);
$root = $_SERVER["DOCUMENT_ROOT"]."/new";        
include_once($root . "/Config/Config.php");     
$picture = PictureRepository::GetPictureById($_GET["id"]);  
header("Content-type:". $picture->GetType());
echo $picture->GetPicture();

不幸的是,IE显示了一个带有红叉的块,Firefox告诉图像包含错误

谁看到了解决方案?

2 个答案:

答案 0 :(得分:0)

问题在于您使用echo

echo用于打印字符串。您需要将二进制数据写入STDOUT流。

为此,您需要使用fwrite

类似的东西:

fwrite(STDOUT,$picture->GetPicture());

答案 1 :(得分:0)

下载图像(右键单击/另存为),然后在文本编辑器中将其加载,查看文件开头是否有任何PHP警告/错误。你有E_ALL用于错误报告,因此脚本中任何地方的单一语法奇怪都会发出警告并破坏数据流。