Как извлечь изображения в формате BLOB из базы данных MySQL и отобразить в теге html <img>? - PullRequest
0 голосов
/ 24 марта 2019

Я создал базу данных MySQL с таблицей, используя phpmyadmin. Я создал эту таблицу со столбцом BLOB для хранения файла .jpg.

В данный момент я пытаюсь отобразить изображение (BLOB) в теге HTML, но безуспешно. Я получаю только значок испорченного изображения при запуске кода.

Примечание: я знаю, что делать это не рекомендуется, но в настоящее время я тоже.

Я уже пытался найти различные вопросы здесь, в 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'];
?>

Это должно отображать все строки в базе данных вместе с одним и тем же изображением, но при этом отображаются все строки с соответствующей информацией и разбитым изображением.

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Я нашел решение своей проблемы, я использовал 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();
?>
0 голосов
/ 24 марта 2019

Ваша первая ошибка в том, что вы написали программу, которая делает много вещей, а затем пытается выяснить, почему ни одна из них не работает. Вы должны были создать скрипт Minimal, Verifiable и Complete, чтобы проверить это и исправить это первым - весь первый скрипт, который вы разместили здесь, должен быть заменен на:

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

Вы также должны были опубликовать код, который записывает данные в базу данных. Ни вы, ни мы не знаем, связана ли проблема с данными, записанными в базу данных, или возникает, когда вы извлекаете данные.

Вам также следует убедиться, что вы регистрируете ошибки / отчеты работают правильно и что PHP еще не сообщает вам, в чем заключается ошибка.

Другими вещами, которые вы можете попробовать, является запись данных в файл и проверка, действительно ли у вас есть файл изображения, просмотр заголовков, возвращаемых getimage.php, чтобы убедиться, что они соответствуют вашим ожиданиям.

Наконец, потратьте некоторое время, чтобы немного узнать о безопасном программировании, прежде чем размещать подобный код в Интернете - здесь много проблем с безопасностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...