Подтвердить что ты не робот

PHP отображает изображение BLOB из MySQL

Я пытаюсь отобразить изображение, сохраненное в столбце BLOB в базе данных;

Я извлекаю данные из базы данных с помощью SELECT, не выполняю преобразований данных и отображаю их со следующим (из script, единственным выходом которого является следующий):

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

Обратите внимание, что хром отображает размер содержимого как правильный размер для изображения, а также правильный тип mime (image/jpeg). ничто не повторяет перед заголовком, а ive проверяет правильность блоба в базе данных. Также нет теневых пробелов до или после тегов <?php ?>.

chrome/IE отображает значок изображения, но не сам образ. любые идеи?

EDIT: изображение получает из базы данных как таковое:

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

var_dump ($ image) дает:

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

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

Ответ 1

Попробуйте вот так.

Для вставки в DB

$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$image = addslashes(file_get_contents($_FILES['images']['tmp_name']));
//you keep your column name setting for insertion. I keep image type Blob.
$query = "INSERT INTO products (id,image) VALUES('','$image')";  
$qry = mysqli_query($db, $query);

Для доступа к изображению из Blob

$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$result=mysqli_fetch_array($sth);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';

Надеюсь, это поможет вам.

Спасибо.

Ответ 2

Это то, что я использую для отображения изображений из blob:

echo '<img src="data:image/jpeg;base64,'.base64_encode($image->load()) .'" />';

Ответ 3

Так как я должен хранить типы содержимого varius в моем поле/столбце blob, предположим, чтобы обновить мой код следующим образом:

echo "data: $mime" $result['$data']";

где: mime может быть изображением любого типа, текстом, текстовым документом, текстовым документом, pdf-документом, e.t.c... данные - это содержимое столбца blob.