PHP将图像显示为BLOB mysqli

时间:2014-11-20 16:32:30

标签: php database mysqli blob

我在StackOverflow上阅读了所有可能的问题,我问了所有我认识的人,没有人可以帮助我。 我在数据库中有表:

CREATE TABLE IF NOT EXISTS `zdjecia` (
`id` int(11) NOT NULL,
  `imie_wlasciciela` varchar(50) NOT NULL,
  `zdjecie` blob NOT NULL,
  `nazwa` varchar(50) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16

我很抱歉没有英文变量,但我想保留所有来源而不做任何更改。 imie_wlascicielanazwa在我的问题中并不重要。 所以zdjecie是图像的二进制数据 id是id。

我有一个应该显示图片的文件。

// single_image.php

<?php

if (isset($_GET['id']))
{
    include('../connect.php'); // connect to database
    $id = $_GET['id'];
    $ret = $conn->query("SELECT * FROM zdjecia WHERE id=$id");
    $row = $ret->fetch_assoc();
    header("Content-type: image/png");
    echo $row['zdjecie'];
    // echo $row['nazwa']; // correct the result.
}
?>

在我的浏览器网址中,我粘贴了... / single_image.php?id = 8

我的问题是没有显示图像,我在数据库中有很少的图像。我可以在XAMPP中通过/ phpmyadmin下载它,它是正确的图像,但我的页面没有正确显示, 每次我看到一个破碎的图像图标。

文件single_image.php设置为无炸弹和Code-Page 1250(中欧)。

当我按$row['nazwa']检查结果并评论header("Content-type...")时,它会在数据库中显示正确的varchar(50)

我使用它就像写上面的几行,或者用html,<img src="single_image.php?id=8"/>

3 个答案:

答案 0 :(得分:3)

尝试以下

echo '<img src="data:image/png;base64,'.base64_encode( $row['zdjecie'] ).'"/>';

为了更好的维护,您可以添加data:image/png;base64作为标题,然后echo base64_encode( $row['zdjecie'] )这将适用于single_image.php?id=$id

答案 1 :(得分:0)

使用phpMyAdmin,我必须在我的MySQL映像列= avatar_image上将MIME显示类型更改为.jpeg。一旦进行了简单的更改,它就会显示在浏览器中...即浏览器正在以原始格式将.jpeg数据作为BLOB形式获取,并且不知道如何处理...。但这是一个MySQL配置=固定它的MySQL列上的MIME类型更改。

答案 2 :(得分:-1)

  1. 不要将图像存储在数据库中,这是性能自杀。
  2. 不要让您的代码容易受到SQLinjection的攻击。<​​/ li>
  3. 如果必须在db中存储文件,请存储内容类型。也许这不是一个png?或者你打印出警告/通知?它会打破你的形象。