2011-05-06 205 views
0

我想显示存储在MySql数据库中的图像。来自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(); 

不幸1E示出了带有红色叉的块和Firefox告诉图像包含错误

谁看到溶液?

回答

0

问题是您使用echo

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

为此,您需要使用fwrite

喜欢的东西:

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

此答案实际上不正确。 'echo'毫无疑问地发出二进制数据。 – Charles 2011-05-06 20:46:53

0

下载图像(右键单击/另存为),然后在文本编辑器加载它,看看是否有任何PHP警告/错误的文件的开头。你有错误报告的E_ALL,所以脚本中任何地方的单个语法奇怪会吐出警告并破坏数据流。

+0

texteditor显示一个空文件,但如果id注释phpfile中的标题,我看到一个不可读的文本。它看起来像一个二进制文件 – user558163 2011-05-06 19:43:18

+0

一个简单的检查就是将下载的文件大小与文件大小上载到数据库之前的大小进行比较。它们应该是相同的。 – 2011-05-06 20:00:24

+0

嗨马克感谢您的帮助。当我试图(右键单击/另存为)时,我只能看到'show image'(类似的东西)。我的浏览器是荷兰语 – user558163 2011-05-06 20:09:57

相关问题