使用PHP从数据库中获取图像

时间:2011-05-27 15:47:19

标签: php mysql database upload insert

第一次使用堆栈溢出。

我已经按照以下2部分关于在MYSQL数据库中上传/存储图像的youtube教程。我按照说明操作,但我的图像没有显示给我。我使用connect.php连接到数据库,这似乎工作正常。似乎问题在于get.php,因为当我测试回显来自它的任何图像时,我总是得不到图像。  使用phpmyadmin创建数据库并使用xampp。

这是指向youtube教程的链接

http://www.youtube.com/watch?v=CxY3FR9doHI

http://www.youtube.com/watch?v=vFZfJZ_WNC4&feature=fvwrel

包含文件

<html>
<head>
    <title>Upload an image</title>
</head>
<body>

<form action="index.php" method="POST" enctype="multipart/form-data">
    File:   
<input type="file" name="image"> <input type="submit" value="Upload">
</form>

<?php

include 'connect.php';



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

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

    $image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
    $image_name=addslashes($_FILES['image']['name']);
    $image_size = getimagesize($_FILES['image']['tmp_name']);

    if ($image_size==FALSE)
        echo "That's not an image.";
    else{
            if(!$insert = mysql_query("INSERT INTO store       VALUES('','$image_name','$image')"))
        echo"Problem uploading image";
    else{
        $lastid = mysql_insert_id();

        echo "image uploaded.<p />your image:<p /><img src=get.php?id=$lastid>";
        }
    }
}

?>
</body>
</html>

这是get.php

<?php
include 'connect.php';

$id=stripslashes($_REQUEST('id'));
$image = mysql_query("SELECT * FROM store WHERE id=$id");
$image = mysql_fetch_assoc($image);
$image=$image('image');

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


?>

最后连接

<?php
// connect to database

$db_host="localhost";
$db_username="root";
$db_pass="";
$db_name="test";

@mysql_connect("$db_host","$db_username","$db_pass") or die("Could not connect to      mysql");
mysql_select_db("$db_name")or die("Cant find database");

?>

6 个答案:

答案 0 :(得分:4)

get.php echo $image没有$image=$image('image'); 另外,$image=$image['image'];应为$_REQUEST('id')$_REQUEST['id']应为addslashes

P.S。不要使用{{1}}来防止SQL注入。使用mysql_real_escape_string

答案 1 :(得分:1)

你永远不会在get.php中回显图像数据,所以你要提供一个空白的0字节图像。

答案 2 :(得分:1)

标题输出后缺少一行

header("content-type: image/jpeg");
echo $image;

答案 3 :(得分:0)

快速一瞥,在get.php改变:

$image=$image('image');

$image=$image['image'];

mysql_fetch_assoc()将结果转换为数组。

答案 4 :(得分:0)

你最好使用bas64_encoding解码方式,这样任何人都不会产生问题。

base64_encode(file_get_contents($_FILES['image']['tmp_name']));

这是错误的,因为数组是[]不是()     包括'connect.php';

$id=stripslashes($_REQUEST('id'));
$image = mysql_query("SELECT * FROM store WHERE id=$id");
$image = mysql_fetch_assoc($image);
$image=$image['image'];

header("content-type: image/jpeg");
echo base64_decode($image);

答案 5 :(得分:-2)

我在我的网站上使用的一段代码:

<?php
ob_start();
require_once("db.php.lib");

DBLogin();
$sql = "select pic_user_id, pic_full_data as bindata, pic_full_mime as mime, pic_full_size as size from pics where pic_name = '".urldecode($_GET["pic_name"])."'";

$result = DBExec($sql);
if ($result)
{
  $row = DBGetNextRow($result);
  if ($row)
  {
    header("Content-type: ".$row["mime"]);
    header("Content-length: ".$row["size"]);
    ob_clean();
    echo $row["bindata"];
    ob_end_flush();
  }
}
?>

看起来你要省略图像数据的实际输出,某些浏览器可能需要长度......