58

I'm attempting to display an image stored in the BLOB column in the database;

I fetch the data from the database with a SELECT perform no transformations on the data and display it with the following (from a script whose only output is the following):

header("Content-Type: image/jpeg");
echo $image;

Please note chrome is displaying the content size as the correct size for the image as well as the correct mime type (image/jpeg). nothing is echoing out before the header and ive checked the blob in the database is correct. There is also no trailing whitespace before or after the <?php ?> tags.

chrome/IE displays an image icon but not the image itself. any ideas?

EDIT: image is got the from the database as such:

$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$row = $sth->fetch();
$image = $row['image'];

var_dump($image) gives:

string 'ÿØÿà�JFIF��x�x��ÿá�ZExif��MM�*�����������J��������Q�������Q������tQ������t�����† ��±ÿÛ�C�       

ÿÛ�CÿÀ�_"�ÿÄ����������� 
ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ 
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³    ´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ��������'... (length=60766)
user2732663
  • 833
  • 2
  • 10
  • 18

2 Answers2

151

Try it like this.

For inserting into DB

$db = new mysqli("localhost", "root", "", "DbName");
$image = file_get_contents($_FILES['images']['tmp_name']);
$query = "INSERT INTO products (image) VALUES(?)";
$stmt = $db->prepare($query);
$stmt->bind_param('s', $image);
$stmt->execute();

For accessing image from Blob

$db = new mysqli("localhost", "root", "", "DbName");
$sql = "SELECT * FROM products WHERE id = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_array();
echo '<img src="data:image/jpeg;base64,'.base64_encode($row['image']).'"/>';
Dharman
  • 30,962
  • 25
  • 85
  • 135
18

This is what I use to display images from blob:

echo '<img src="data:image/jpeg;base64,'.base64_encode($image->load()) .'" />';
Arian Faurtosh
  • 17,987
  • 21
  • 77
  • 115
  • is $image a php object? – Kebab Programmer Nov 29 '15 at 18:53
  • Working like charm! Thank you.. @ProgrammingNewb you can place your image data type in $image. it could be a PHP variable from $row["photo"]; – Moxet Khan May 24 '16 at 06:08
  • nice to know it worked for you, I took a different approach, I created a folder in my server and store all images there, and i store the link of the image in my mysql database, then whenever I want to display an image, call the link stored in my database – Kebab Programmer May 25 '16 at 13:18