显示存储在mysql blob中的图像

时间:2011-04-02 20:58:29

标签: php mysql blob

当我运行下面的代码时,它会显示一个存储在mysql Db中的图像作为blob变量。问题是如果我回应其他任何东西,甚至像echo'--------'这样简单的事情;在我调用图像之前,图像不会显示。只显示随机字符。如果我在图像之后回显任何图像,那么图像显示但没有任何效果。有人可以告诉我为什么会这样,以及如何一起展示其他项目和图像,谢谢

<?php

include("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 个答案:

答案 0 :(得分:27)

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

尝试这样的事情:

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

请注意,这不是最佳解决方案,因为它无法缓存且速度相当慢,尤其是在手机上。查看caniuse for data URIs

答案 1 :(得分:9)

嗯......为什么它会按你所描述的那样做的答案是因为你使用了header()函数。在PHP中,您无法在标头调用之前打印任何内容,因为这会指示Web服务器准备内容标头。通常那些完全取代所有内容。

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

  1. 它对性能和渲染有重大影响。
  2. 您必须编写代码渲染blob数据,而不仅仅是显示图像本身。
  3. 数据库驱动的图像显示的首选方法是将图像存储在目录中,并将其文件名存储在数据库中。现在,当您希望显示图像时,您只需要轮询数据库以查找要显示的文件名,然后只需将文件名包含在HTML属性中即可。

    执行速度也快得多。

    另外,我想指出,如果您希望脚本实际上进行渲染,您可能希望该脚本定义标题,然后在定义标题后回显或打印图像blob。

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

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

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

答案 2 :(得分:3)

只是一个想法,也许你可以分离逻辑来显示内容中的图像。我的意思是你可以创建一个像pic.php这样接受id / filename的文件(不确定你是否使用文件名或id来引用图像),然后显示图像。然后你可以简单地在HTML中引用图像,例如做这样的事情:

<p>my content</p>
<img src="pic.php?picid=1" />
<p>my Other Content</p>