2

这就是我的表在我的数据库中的样子。我正在尝试显示我存储的图像,它是 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; 
?>
4

3 回答 3

1

这:

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

应该:

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

您直接将变量嵌入到查询中,而不是像您打算的那样实际使用绑定变量。

于 2012-07-27T08:52:05.803 回答
0

它没有直接回答这个问题,但通常这不是你这样做的方式。

通常,您会将图像的路径存储在数据库中(可能作为varchar字段),然后像往常一样加载图像。这样做的好处是它很容易,使数据库保持小并且更容易版本化,正常的缓存规则适用于图像等。

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

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

于 2012-07-27T08:24:31.770 回答
0

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

header("Content-Length: ".strlen($image));
header("Content-Type: image/jpeg");
于 2012-07-27T10:31:01.117 回答