PHP将图像显示为BLOB mysqli

问题描述 投票:3回答:3

我在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

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

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

当我通过$row['nazwa']检查结果,并评论header("Content-type...")线时,它显示正确的varchar(50)来自数据库。

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

php database mysqli blob
3个回答
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


0
投票

使用phpMyAdmin,我不得不在MySQL镜像列= avatar_image上将MIME显示类型更改为.jpeg。一旦我做了这个简单的改变,就会在浏览器中显示...即。浏览器将原始格式的.jpeg数据作为BLOB获取,并且不知道如何处理...但是MySQL列上的MySQL配置= MIME类型更改修复了它。


-1
投票
  1. 不要将图像存储在DB中,这是性能自杀。
  2. 不要让你的代码容易受到SQL注入攻击。
  3. 如果必须在db中存储文件,请存储内容类型。也许这不是一个png?或者你打印出警告/通知?它会打破你的形象。
© www.soinside.com 2019 - 2024. All rights reserved.