我正在尝试显示存储在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告诉图像包含错误
谁看到了解决方案?
答案 0 :(得分:0)
问题在于您使用echo
。
echo
用于打印字符串。您需要将二进制数据写入STDOUT流。
为此,您需要使用fwrite
。
类似的东西:
fwrite(STDOUT,$picture->GetPicture());
答案 1 :(得分:0)
下载图像(右键单击/另存为),然后在文本编辑器中将其加载,查看文件开头是否有任何PHP警告/错误。你有E_ALL用于错误报告,因此脚本中任何地方的单一语法奇怪都会发出警告并破坏数据流。