使用PHP从SQL BLOB显示图像

时间:2013-12-10 15:48:39

标签: php sql blob

我有两个文件,一个用于上传图像,另一个用于从数据库中检索图像并将其显示在网页上。但是,图像仅显示为损坏的图像图标。我不明白为什么。

感谢您提前提供任何帮助。

HTML表单:

<form action="index.php" method="POST" enctype="multipart/form-data">

    <label for="image">File:</label>
    <input type="file" name="image">
    <input type="submit" value="Upload">

</form>

用于上传它的php(与数据库的连接在下面省略,但它完美地运行):

//file stuff
$file= $_FILES['image']['tmp_name'];

if(!isset($file))  
    echo "Please select an image";

else {

    $image=addslashes(file_get_contents($_FILES['image']['tmp_name']));
    $imageName=addslashes($_FILES['image']['name']);
    $imageSize=getimagesize($_FILES['image']['tmp_name']);
    if(!$imageSize)
        echo "Thats not an image you mong";
    else {

        //upload    
        $query="INSERT INTO store VALUES('','$imageName','$image')";
        $sendQuery=mysql_query($query);
        if(!$sendQuery)
            echo "This is embarressing. It didn't work";
        else {

            $lastid=mysql_insert_id();
            echo "Image was uploaded. <br>Your image:";
            echo "<img src=get.php?id=$lastid/>";


        }
    }    

}

用于检索图像的PHP(同样,数据库连接在下面省略,但工作正常):

$id=addslashes($_REQUEST(['id']));

$imageQuery="SELECT * FROM store WHERE id=$id;";
$sendImageQuery=mysql_query($imageQuery);
$image=mysql_fetch_assoc($sendImageQuery);

$image=$image['image'];

header("Content-type: image/jpeg");

echo $image;

2 个答案:

答案 0 :(得分:2)

确保打开的php标记是文件的第一行。如果打开的php标记不在文件的第一行,则内容已经写入响应,导致对header()函数的调用被忽略。

<?php // this has to be on line 1

// do database connections stuff, no output can be sent to the response.
$id=addslashes($_REQUEST(['id']));

$imageQuery="SELECT * FROM store WHERE id=$id;";
$sendImageQuery=mysql_query($imageQuery);
$image=mysql_fetch_assoc($sendImageQuery);

$image=$image['image'];

header("Content-type: image/jpeg");

echo $image;

?>

答案 1 :(得分:0)

也许是一个神奇的引用设置(magic_quotes_gpc),请尝试:

$image=stripslashes($image['image']);

您应该使用mysql_real_escape_string()代替addslashes(),并且仅在未启用魔术引号的情况下使用。