从blob mysql显示图像

时间:2009-05-25 16:45:17

标签: php mysql

您好我的数据库中有一张图片表。这些存储为blob以及图像类型和图像等细节。名。

我在显示图像时出现问题,我得到的只是一个带有红叉的白色方框。 代码:

<?php

include '../connection.php';

$ID = $_GET['id'];

$query = "SELECT * FROM `images` WHERE `image_id` = '$ID'";

$result=mysql_query($query);
$row = mysql_fetch_array($result);

$image = $row['image'];
$image_type= $row['image_type'];   

header("Content-type: $image_type");
print $image; 

exit;

?>

由于

7 个答案:

答案 0 :(得分:3)

这是一个简短的答案。

<?php
include '../connection.php';
$id = (int)$_GET['id'];
$query = "SELECT * FROM `images` WHERE `image_id` = '$id'";

$result=mysql_query($query);
$row = mysql_fetch_array($result);

$image = $row['image'];
$image_type= $row['image_type'];
$size = $row['image_size'];
//alternative
/* list($image, $image_type, $size) = array(
                                       $row['image'],
                                       $row['image_type'],
                                       $row['image_size']
                                      );
*/
$ext = explode('/', $image_type);
$name = $id . '.' . $ext[1]; 

header("Content-type: $image_type");
header("Content-length: $size");
header("Content-Disposition: attachment; filename=$name");

print $image;     
exit;

检查您的blobtype是最少的MEDIUMBLOB,它能够存储高达16M的数据

答案 1 :(得分:1)

要调试这个,我建议注释掉Content-type标题行,然后直接在浏览器中点击url。这将允许您查看PHP可能发出的任何错误,警告或通知。

答案 2 :(得分:0)

看起来它可能有效,出了什么问题?

尝试明确指定字段:

 SELECT image, image_type FROM ...

从数据库运行查询时会发生什么?

您是否正在加载图像:

<img src="image.php?id=12">

或者您将PHP加载为自己的页面?

答案 3 :(得分:0)

要尝试的事情

  1. 也许某些内容失败了,它在html中返回错误消息而不是预期的图像

  2. 是在数据库中正确存储的content_type,还是只存储图像的文件扩展名

  3. content-type应该看起来像这样

    image/gif 
    image/jpeg
    

答案 4 :(得分:0)

也许你可以试试

$row = mysql_fetch_assoc($result);

而不是

$row = mysql_fetch_array($result);

答案 5 :(得分:0)

你在评论中说,该表最初说“[BLOB - 64.0 KiB]”但你把它改为“MEDIUMBLOB”。这将扩展您可以存储的大小,但所有现有数据仍将被截断为64KiB。

确保您使用的字段类型足以存储您要存储的数据(在MEDIUMBLOB中为16mb,在LONGBLOB中为~4gb,我非常确定),然后重新插入所有数据。 / p>

除了提到的安全问题之外,我不明白为什么代码不应该在数据库问题之外工作。

答案 6 :(得分:0)

或者如果你不想创建一个单独的php文件,你可以内联它

<?php
// retrieve blob into $img
?><img src='data:image/png;base64,<?php echo base64_encode( $img );?>' alt='Image <?php echo $id;?>'>