为了账号安全,请及时绑定邮箱和手机立即绑定

显示存储在mysql blob中的图像

显示存储在mysql blob中的图像

GCT1015 2019-10-21 12:49:55
当我运行下面的代码时,它显示一个图像,该图像作为blob变量存储在mysql Db中。问题是我是否回声了其他任何东西,甚至像echo'--------'这样简单的东西;在我调用图像之前,图像将不会显示。仅显示随机字符。如果我在图像显示后回声了什么,但图像显示后却什么也没有。有人可以告诉我为什么吗,以及我如何一起显示其他项目和图像,谢谢<?phpinclude("inc/library.php");connectToDatabase();$sql = "SELECT * FROM theBlogs WHERE ID = 1;";$result = mysql_query($sql) or die(mysql_error());  $row = mysql_fetch_array($result);header("Content-type: image/jpeg");echo $row['imageContent'];$db->close();?>
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

您可以将图像数据转换为base64并将其粘贴在<img>标签中。当前,您正在尝试在图像数据之外写入文本,并且Internet浏览器认为您的文本是图像的一部分,因此会引发错误。


尝试这样的事情:


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

echo 'Hello world.';

请注意,这不是最佳解决方案,因为它无法缓存且速度相当慢,尤其是在手机上。检出Caniuse以获得数据URI。


查看完整回答
反对 回复 2019-10-21
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

好吧...之所以会执行您描述的操作的原因是因为您使用了header()函数。在PHP中,您无法在标头调用之前打印任何内容,因为这会指示Web服务器准备内容标头。通常,这些内容将完全取代所有内容。


其次,我想提一下,将图像存储在数据库中通常是一个坏主意,这有两个原因。


它对性能和渲染有重大影响。

您必须编写代码来呈现Blob数据,而不仅仅是显示图像本身。

数据库驱动的图像表示的首选方法是将图像存储在目录中,并将文件名存储在数据库中。现在,当您希望显示图像时,只需要轮询数据库以获取要显示的文件名,然后只需将文件名包含到HTML属性中即可。


执行速度也快得多。


另外,我想指出的是,如果您希望脚本实际执行渲染,则希望该脚本定义标题,然后在定义标题后回显或打印图像斑点。


请注意,当您创建html标记时...在src属性中,则应使其更像这样;


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

现在,您的image.php文件将把图像数据吐出到标签中。


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 813 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信