如何显示存储在MySql数据库中的BLOB图像?

5
我想展示最近上传到我的MySql“store”表中的5张图片。我对PHP和数据库一窍不通,我已经阅读了很多有关如何做到这一点的资料,但没有成功。 我可以一次存储并显示一张照片,但我希望能够有一种展示最近上传的5张照片的画廊。 非常感谢您提供任何建议或帮助! 附言:我知道像这样将图片存储到数据库中是不被推荐的,但这个项目只是为了练习。 index.php
<!DOCTYPE html>
<html>
<head>
<title>Project One</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>
<p />

<?php

//connect to database
(connect to server)
(select correct DB)

//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 = $_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>";

        }
  }
  }

?>

<p />
<p />
<a href="http://WEBSITE.com/gallery.php"> Go to Gallery </a>
</body>

</html>

get.php

<?php

   //connect to database
    (connect to server)
    (select correct DB)

$id = addslashes($_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 $image;

?>

请查看以下链接: https://dev59.com/InVD5IYBdhLWcg3wAWsO - Vucko
4个回答

7

我曾尝试使用header('content-type: image/jpeg');的方式,但最终导致图片无法显示。经过搜索,我找到了解决方法,可以将数据库中的图片显示在我的页面上。

请尝试以下方法:

mysql_connect("localhost","root","")or die("Cannot connect to database"); //keep your db name
mysql_select_db("example_db") or die("Cannot select database");
$sql = "SELECT * FROM `article` where `id` = 56"; // manipulate id ok 
$sth = mysql_query($sql);
$result=mysql_fetch_array($sth);
// this is code to display 
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image_file'] ).'"/>'

警告:mysql_query在PHP 5.5.0中已被弃用,并在PHP 7.0.0中被移除。应使用MySQLi或PDO_MySQL扩展代替。 - Manatax

7
这是我很久以前想要做类似的事情时使用的东西!= P
$sql = "SELECT image FROM table WHERE cond ORDER BY xxxx DESC LIMIT 5";
$result = mysqli_query($db,$sql);
while($arraySomething = mysqli_fetch_array($result))
{
    echo "<img src='php/imgView.php?imgId=".$arraySomething."' />";
}

除此之外还有什么吗?我尝试添加这个,但它打印了一张损坏的图片...我应该如何创建一个循环,以便从行的最大值开始递减并打印每个图片呢?对于1..5循环 '打印具有max_id的图像',然后 从max_id递减... 大致如此 - Ktmock13
我的示例不是为了直接复制/粘贴,我只是向您展示如何添加一个。您可以在查询中基本上添加一个LIMIT 5并将其排序以显示最后5个。然后像这样做: $sql =“SELECT * FROM table WHERE cond LIMIT 5”; $result = mysqli_query($db,$sql); while($arraySomething = mysqli_fetch_array($result)) { // 在此处echo img } - Manatax

2
mysql_connect("localhost","root","")or die("Cannot connect to database"); 

//keep your db name
mysql_select_db("example_db") or die("Cannot select database");

$sql = "SELECT * FROM `article` where `id` = 56"; 
// manipulate id ok 
$sth = mysql_query($sql);
$result=mysql_fetch_array($sth);
// this is code to display 

echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image_file'] ).'"/> width="xxxx" height="xxxx"';

同时添加高度和宽度


1
警告:mysql_query在PHP 5.5.0中已被弃用,并在PHP 7.0.0中移除。应使用MySQLi或PDO_MySQL扩展来代替。 - Manatax

1
您也可以使用此功能。
//Retrieve image from database and display it on html webpage    
function displayImageFromDatabase(){    
//use global keyword to declare conn inside a function    
global $conn;    
$sqlselectimageFromDb = "SELECT * FROM `imageuploadphpmysqlblob` ";    
$dataFromDb = mysqli_query($conn, $sqlselectimageFromDb);    
while ($row = mysqli_fetch_assoc($dataFromDb)) {    
echo '<img height="250px" width="250px" src=data:image;base64,'.$row['image'].'/>';    
}

将其插入到mysql数据库中,如下所示:

$image = $_FILES['imagefile']['tmp_name'];
$name = $_FILES['imagefile']['name'];
$image = base64_encode(file_get_contents(addslashes($image)));

参考文献:https://mauricemutetingundi.blogspot.com/2019/04/how-to-upload-blob-image-to-mysql.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接