Php 显示MySQL数据库中存储为BLOB数据的所有图像

Php 显示MySQL数据库中存储为BLOB数据的所有图像,php,mysql,Php,Mysql,我已经上传了一些图片到MySQL使用PHP。每次修改HTML img标记中的id时,我也可以显示1个图像。 但现在我试图显示MySql数据库中存储的所有图像,问题是当我使用“While循环”时,它只显示文本列,而不显示MySql中作为BLOB数据存储的图像 我有一个名为my_db的数据库 我有一张桌子叫:blob 我的表中有3列:id、name和image 以下是index.php的代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans

我已经上传了一些图片到MySQL使用PHP。每次修改HTML img标记中的id时,我也可以显示1个图像。 但现在我试图显示MySql数据库中存储的所有图像,问题是当我使用“While循环”时,它只显示文本列,而不显示MySql中作为BLOB数据存储的图像

我有一个名为my_db的数据库 我有一张桌子叫:blob 我的表中有3列:id、name和image

以下是index.php的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

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

if(isset($_POST['submit']))
{
    mysql_connect("127.0.0.1","root","");
    mysql_select_db("my_db");

    $imageName = mysql_real_escape_string($_FILES["image"]["name"]);
    $imageData = mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]));
    $imageType = mysql_real_escape_string($_FILES["image"]["type"]);

    if(substr($imageType,0,5) == "image")
    {
        mysql_query("INSERT INTO `blob` VALUES('','$imageName','$imageData')");
        echo "Image Uploaded!";
    }
    else
    {
        echo "Only images are allowed!";
    }

}

?>

<img src="showimage.php?id=11">

</body>
</html>
<?php

mysql_connect("127.0.0.1","root","");
mysql_select_db("my_db");

if(isset($_GET['id']))
{
    $id = mysql_real_escape_string($_GET['id']);
    $query = mysql_query("SELECT * FROM `blob` WHERE `id`='$id'");
    while($row = mysql_fetch_assoc($query))
    {
        $imageData = $row["image"];
    }
    header("content-type: image/jpeg");
    echo $imageData;
}
else
{
    echo "Error!";
}

?>


首先,您需要删除
if(isset($\u GET['id'])
语句,因为您希望显示所有图像

接下来,通过将查询更改为不带id的查询来查询所有图像

$query = mysql_query("select * from `blob`");
接下来,将图像数据存储到数组中

$images = array();
while ($row = mysql_fetch_assoc($query)) {
  $images[] = $row['image'];
}
最后,显示所有图像。(获得了显示多个blob的代码)

/*应删除标题
标题(“内容类型:图像/jpeg”)*/
foreach($images作为$image){
回声';
}
在控制器中:

function display()
{
    $imagename= mysql_real_escape_string($_FILES["userfile"]["name"]);

    $imagedata= mysql_real_escape_string(file_get_contents($_FILES["userfile"]["tmp_name"]));
    $imagetype= mysql_real_escape_string($_FILES["userfile"]["type"]);

    $imagesize= mysql_real_escape_string($_FILES["userfile"]["size"]);
    $imagedetails = array(  'image_name'    => $imagename,
                                'image_data'   => $imagedata
            );
   // $insertedid =$this->model_data->insert_image($imagedetails);
    $this->load->model('model_data');   
    $data['imagee'] = $this->model_data->display_pic($insertedid);  // variable data holds image                
    $this->load->view('profile_view',$data);            
}   
在模型中:

function display_pic($insertedid)
{   
    $query = mysql_query("SELECT * FROM employee_image WHERE id = ".$insertedid);
    $row = mysql_fetch_assoc($query);
    $this->db->stop_cache();
    return $row['image_data'];
}

function insert_image($imagedetails) { 

    $this->db->insert($this->table_name2,$imagedetails);            
    $id=$this->db->insert_id(); 
    return $id;
}

当我尝试该代码时,我得到一个错误“图像无法显示,因为它包含错误”?@user3740970,你能在没有
标题(“内容类型:image/jpeg”)
的情况下尝试它吗?然后我得到了损坏的图像图标(比如在HTML中写入错误路径)在所有的图像中,没有一个错误…@user3740970,我犯了一个错误,在
base64_encode($image)后面放了一个
。它已从答案中删除,但我认为这不是问题所在。你能用你当前的代码更新你的帖子吗?但有一个问题,当我更新页面并显示图像时,它们会在1分钟或类似时间后再次消失??将视图的代码粘贴到评论中的目的是什么?这绝对是不现实的可阅读。重新访问您的问题,单击“编辑”,并将其放置在所属位置。然后,删除注释。此外,添加一些文本来解释您的答案。
function display_pic($insertedid)
{   
    $query = mysql_query("SELECT * FROM employee_image WHERE id = ".$insertedid);
    $row = mysql_fetch_assoc($query);
    $this->db->stop_cache();
    return $row['image_data'];
}

function insert_image($imagedetails) { 

    $this->db->insert($this->table_name2,$imagedetails);            
    $id=$this->db->insert_id(); 
    return $id;
}