【问题标题】:How to retrieve images in BLOB format from MySQL database and display in an html <img> tag?如何从 MySQL 数据库中检索 BLOB 格式的图像并显示在 html <img> 标签中?
【发布时间】:2019-03-24 11:14:52
【问题描述】:

我使用 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'];
?>

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

【问题讨论】:

  • 如果您在新的浏览器窗口中打开getImage.php,您应该会看到错误。这是因为您对mysqli_select_db()mysqli_query() 的调用缺少$link 参数。你为什么不像test.php那样使用面向对象的api(即$link-&gt;select_db()$link-&gt;query())?
  • Note: I know it's not recommended to do this, but currently i have too. 为什么?您需要这种方式是否有特定原因?也许这是一个X-Y problem,我们可以帮助您?
  • 感谢您的回复。问题是我目前正在做一个学校项目,我几乎是这方面的初学者,我正在使用一个 java 项目将数据插入 MysQL 数据库,我发现这样做的唯一方法是使用 BLOB类型。
  • 关于您的第一个问题,这两个代码块都源自我从 stackoverflow 问题中尝试的其他解决方案。就像我说的那样,我真的只是初学者,我不确定一切是如何运作的。

标签: php html mysql image blob


【解决方案1】:

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

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

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

您还应该检查您的错误记录/报告是否正常工作,并且 PHP 尚未告诉您错误是什么。

您可以尝试的其他事情是将数据写入文件并检查您是否确实有图像文件,查看 getimage.php 返回的标头以确保它们是您所期望的。

最后,在将这样的代码发布到互联网之前,请花一些时间了解一下安全编程 - 这里有很多安全问题。

【讨论】:

  • 感谢您的回复。我会考虑您所说的并编辑我的帖子以使其更清晰。
【解决方案2】:

我找到了解决问题的方法,我使用了 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();
?>

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 2011-12-09
    • 2013-01-13
    • 2012-05-02
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多