您好我的数据库中有一张图片表。这些存储为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;
?>
由于
答案 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)
要尝试的事情
也许某些内容失败了,它在html中返回错误消息而不是预期的图像
是在数据库中正确存储的content_type,还是只存储图像的文件扩展名
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;?>'>