Вставка / просмотр изображения в / из базы данных MySQL

У меня проблема с вставкой изображений в БД. Таблица имеет следующую структуру:

  • id-> INT (3) -> автоинкремент
  • Name-> УАКСНАК (30)
  • extension-> VARCHAR (10) [возможно, слишком короткий]
  • img-> MEDIUMBLOB

Код PHP, который вставляет изображение:

if($_FILES['file']['error']==0){ $result = is_uploaded_file($_FILES['file']['tmp_name']); if(!$result){ echo "Upload failed"; }else{ $type = explode("/", $_FILES['file']['type']); $extension = $type[1]; $name = $_FILES['file']['name']; $img = $_FILES['file']['tmp_name']; $img = file_get_contents($_FILES['file']['tmp_name']); $img = addslashes ($img); } $sql = "INSERT INTO images (name, extension, img) VALUES ('$name', '$extension', '$img')"; $result = $mysqli->query($sql); if($result){ echo "insertion was successful"; }else{ echo "insertion failed: ".$mysqli->error; } 

И вот как я пытаюсь увидеть img:

 $sql = "SELECT name, extension, img FROM images WHERE id='1'"; $result = $mysqli->query($sql); if($result){ $a = $result->fetch_assoc(); header ("Content-type: image/".$a['estensione']); echo $a['img']; }else{ echo "AAAAAAAAA<hr>"; echo $mysqli->error; } 

Вставка «Хорошо», но я не могу просмотреть изображение. Кроме того, есть еще один способ загрузить изображение в Db?

Сначала в примере с тегом изображения (страница, на которой вы хотите отображать свои результаты)

в теге получите изображение с страницы fetch_image_frm_db.php и отобразите

 <img src="fetch_image_frm_db.php?id=<?php echo $id_of_row;?>"/> 

Страница fetch_image_frm_db.php

 $id=$_GET['id']; $query = "SELECT * FROM images WHERE id=$id"; $result=mysql_query($query) or die('Error, query failed'.mysql_error()); $row=mysql_fetch_array($result); header("Content-type:image/jpeg"); stripslashes ($row['img']); echo $row['img']; 

* * хранение изображений в db не является хорошей практикой

Я думаю, что вы просто ошиблись в своем коде в строке 5:

 $sql = "SELECT name, extension, img FROM images WHERE id='1'"; $result = $mysqli->query($sql); if($result){ $a = $result->fetch_assoc(); header ("Content-type: image/".$a['extension']); echo $a['img']; }else{ echo "AAAAAAAAA<hr>"; echo $mysqli->error; } 

ОК, я решил таким образом … Код для индексной страницы:

 <?php $mysqli = new mysqli("127.0.0.1","root","root","prova"); if($mysqli->connect_errno){ echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } if(isset($_POST['submit'])){ if(isset($_FILES['file'])){ if($_FILES['file']['error']==0){ $result = is_uploaded_file($_FILES['file']['tmp_name']); if(!$result){ echo "Impossibile eseguire l'upload"; }else{ $type = $_FILES['file']['type']; $nome = $_FILES['file']['name']; $img = file_get_contents($_FILES['file']['tmp_name']); $img = addslashes ($img); } $sql = "INSERT INTO immagini (nome, estensione, img) VALUES ('$nome', '$type', '$img')"; $result = $mysqli->query($sql); if($result){ echo "Insertion was succesfully executed"; }else{ echo "Insertion failed: ".$mysqli->error; } } } } echo "<br><br><hr>"; $query = "SELECT * FROM immagini"; $result=$mysqli->query($query) or die('Error, query failed'.mysql_error()); while($row = mysqli_fetch_array($result)){ echo "<p><img height='250' width='250' src=\"fetch_img.php?id=$row[id]\">"; } ?> 

И это скрипт fetch_img.php, эффективно отображающий изображение:

 <?php $mysqli = new mysqli("127.0.0.1","root","root","prova"); if($mysqli->connect_errno){ echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } if($_GET['id']==""){ header("Location: index.php"); } $id=$_GET['id']; $query = "SELECT * FROM immagini WHERE id=$id"; $result=$mysqli->query($query) or die('Error, query failed'.mysql_error()); //var_dump($result); $row= $result->fetch_assoc(); header("Content-type: image/jpeg"); $rs_immagine=imagecreatefromstring($row['img']); imagejpeg( $rs_immagine, null, 100); imagedestroy($rs_immagine); ?> 

Спасибо всем, также за советы, что хранение файла, особенно изображения, внутри БД не рекомендуется … Я первый, кто это сказал, но я должен сделать это.