社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

如何从MySQL数据库中检索blob格式的图像并以html<img>标记显示?

Vyrus C.Krysis • 6 年前 • 1561 次点击  

我使用phpmyadmin创建了一个带有表的mysql数据库。我用blob列创建了这个表来保存.jpg文件。

目前,我正试图在HTML标记中显示图像(blob),但没有成功。在运行代码时,我只会得到损坏的图像图标。

注意:我知道不建议这样做,但目前我也有。

我已经尝试在stackoverflow.com、quora.com和codeofaninja.com中查找各种问题,并尝试实现各种似乎对其他人有效的解决方案,但它们对我无效。

显示信息的位置(test.php):

<html>
     <img src="getImage.php?id=10" width="175" height="200" />
</html>

我试图用来显示图像的代码(getimage.php)

<?php
  $link = mysqli_connect("localhost", "root", "");
  mysqli_select_db("unirentas");
      $id = $_GET['id'];
      // do some validation here to ensure id is safe

      $sql = "SELECT imagen FROM propiedades WHERE ID_renta=$id";
      $result = mysqli_query("$sql");
      $row = mysqli_fetch_assoc($result);
      mysqli_close($link);

      header("Content-type: image/jpg");
      echo $row['imagen'];
?>

这应该显示数据库中的所有行以及同一图像,但它所做的是显示所有行及其相应的信息和损坏的图像。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38159
 
1561 次点击  
文章 [ 2 ]  |  最新文章 6 年前
Vyrus C.Krysis
Reply   •   1 楼
Vyrus C.Krysis    6 年前

我找到了解决问题的方法,我使用base64_encode($blob);函数

<?php
// Server credentials 
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "unirentas";

// Creating mysql connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Checking mysql connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// Writing a mysql query to retrieve data 
$sql = "SELECT ID_renta, calle, smz, mz, lote, precio, universidad, fecha, imagen, nombre, telefono, correo FROM propiedades";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // Show each data returned by mysql
  while($row = $result->fetch_assoc()) {
      $ID_renta = $row["ID_renta"];
      $calle = $row["calle"];
      $smz = $row["smz"];
      $mz = $row["mz"];
      $lote = $row["lote"];
      $precio = $row["precio"];
      $universidad = $row["universidad"];
      $fecha = $row["fecha"];
      $blob = $row["imagen"];
      $nombre = $row["nombre"];
      $telefono = $row["telefono"];
      $correo = $row["correo"];


echo "

    <!-- USING HTML HERE : -->

    <p> ID : $ID_renta</p>
    <p> Calle : $calle </p>
    <p> Smz : $smz </p>
    <p> Mz : $mz </p>
    <p> Lote : $lote </p>
    <p> Precio :  $precio </p>
    <p> Universidad : $universidad </p>";
    echo '<img src="data:image/png;base64,'.base64_encode($blob).'"/>';
    echo "<p> Fecha_  $fecha  </p>
    <p> Nombre :  $nombre  </p>
    <p> Telefono :  $telefono </p>
    <p> Correo :  $correo  </p>
    <p>////////////////////////////////////////////////////////////////////////////////</p>

";
  }
} else {
  echo "0 results";
}

// Closing mysql connection
$conn->close();
?>
symcbean
Reply   •   2 楼
symcbean    6 年前

你的第一个错误是你写了一个程序,它做了很多事情,然后试图找出为什么它们都不起作用。您应该已经创建了一个最小、可验证和完整的脚本来测试这一点,并首先修复这一点—您在这里发布的第一个脚本的全部内容应该替换为:

<html>
<img src="getImage.php?id=10" />
</html>

您还应该发布将数据写入数据库的代码。您和我们都不知道写入数据库的数据是否有问题,也不知道在检索数据时是否正在发生问题。

您还应该检查您的错误日志记录/报告是否正常工作,以及PHP是否还没有告诉您错误是什么。

您还可以尝试将数据写入一个文件,并检查它是否真的有一个图像文件,查看getimage.php返回的头以确保它们是您所期望的。

最后,在你把这样的代码放到互联网上之前,一定要花点时间学习一下安全编程——这里有很多安全问题。