Изображение из базы данных MySQL не отображается в браузере - PullRequest
0 голосов
/ 06 мая 2011

Я пытаюсь отобразить изображение, которое хранится в базе данных 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 голосов
/ 06 мая 2011

Загрузите изображение (щелкните правой кнопкой мыши / сохраните как) и затем загрузите его в текстовом редакторе, посмотрите, есть ли какие-либо предупреждения / ошибки PHP в начале файла.У вас есть E_ALL для отчетов об ошибках, поэтому одна странность синтаксиса в любом месте ваших скриптов выдаст предупреждение и повредит поток данных.

0 голосов
/ 06 мая 2011

Проблема в том, что вы используете echo.

echo для печати строк.Вам необходимо записать двоичные данные в поток STDOUT.

Для этого вам необходимо использовать fwrite.

Что-то вроде:

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