使用PHP从Mysql显示图像

时间:2012-07-27 08:15:40

标签: php mysql

这就是我的数据库中的表格。我试图显示我存储的图像是mimetype(longblob)。当我运行代码时,它给了我一个小盒子? ,那个盒子没有错误。有谁知道错误是什么以及如何解决它?

Display
+-------+------------+----------+
| Index | Display_ID | Picture  |
+-------+------------+----------+
|     1 |         12 | longblob |
+-------+------------+----------+


<?php
    $mysqli=mysqli_connect('localhost','root','','draftdb');


    if (!$mysqli)
        die("Can't connect to MySQL: ".mysqli_connect_error());

    $imageid= 12;

    $stmt = $mysqli->prepare("SELECT PICTURE FROM display WHERE DISPLAY_ID=$imageid"); 
    $stmt->bind_param("i", $imageid);

    $stmt->execute();
    $stmt->store_result();

    $stmt->bind_result($image);
    $stmt->fetch();

    header("Content-Type: image/jpeg");
    echo $image; 
?>

3 个答案:

答案 0 :(得分:1)

此:

$stmt = $mysqli->prepare("SELECT PICTURE FROM display WHERE DISPLAY_ID=$imageid");

应该是:

$stmt = $mysqli->prepare('SELECT PICTURE FROM display WHERE DISPLAY_ID=?');

您直接在查询中嵌入变量,而不是实际使用您想要的绑定变量。

答案 1 :(得分:0)

它没有直接回答这个问题,但通常情况并非如此。

通常您会将图像的路径存储在数据库中(可能是varchar字段),然后按照惯例加载图像。这样做的好处是简单,保持数据库小而且更容易版本化,正常的缓存规则适用于图像等。

缺点是任何人都可以查看图像,这可能会也可能不会引起问题。

如果您需要沿着您已经开始的路线前进,请先注释掉header("Content-Type: image/jpeg");并查看PHP错误。这可能会有所帮助。

答案 2 :(得分:0)

还需要指定内容长度标题:

header("Content-Length: ".strlen($image));
header("Content-Type: image/jpeg");