2013-12-13 5 views
28

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

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

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 ($ изображения) дает:

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

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

Опубликовать то, что составляет '$ image', пожалуйста (т.е. запросы и т. д.) – Machavity

+0

@ user2732663 Вы попробовали мой ответ ниже? –

+0

попытайтесь сохранить '$ image' в двоичный файл и откройте его, возможно, данные в БД повреждены? –

ответ

85

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

для вставки в БД

$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); 

Для получения доступа изображения из бинарного

$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']).'"/>'; 

Надежда Это поможет вам.

Спасибо.

+0

Можете ли вы привести пример, как вы получили идентификатор пользователя для запроса mysql («SELECT * FROM products WHERE id = $ id») из вызова Ajax? Я буду очень благодарен. – diank

+0

Вы спаситель жизни –

11

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

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

is $ image a php object? –

+0

спасибо. Это работает – Pun

+0

Работаю как шарм! Спасибо .. @ProgrammingNewb вы можете поместить свой тип данных изображения в $ image.это может быть переменная PHP из $ row ["photo"]; –

0

Поскольку я должен хранить типы VariUs контента в моем блоб поле/колонке, предположим обновить свой код следующим образом:

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

где: мим может быть изображение любого вида, текст, слова документ, текстовый документ, документ в формате pdf и т. д. данные являются содержимым колонки BLOB

Смежные вопросы