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

content-length ヘッダーも指定する必要があります。

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

これに直接答えているわけではありませんが、通常、これはあなたがこれを行う方法ではありません。

通常、画像のパスをデータベースに保存し (おそらくvarcharフィールドとして)、通常どおりに画像をロードします。これには、簡単で、DB を小さく保ち、より簡単にバージョン管理できる、通常のキャッシュ ルールが画像に適用されるなどの利点があります。

欠点は、誰でも画像を表示できることです。これにより、問題が発生する場合と発生しない場合があります。

開始したルートをたどる必要がある場合は、コメントアウトすることから始めてheader("Content-Type: image/jpeg");、PHP エラーが何であるかを確認してください。これが役立つ場合があります。

于 2012-07-27T08:24:31.770 に答える