Изображение из базы данных MySQL не распечатывается

В таблице запросов и HTML печатаются $row["title"] , дата и row["text1"] . Однако существует проблема с $row["file_data"] , которая должна быть образ, хранящийся в базе данных MySQL. Он печатается как большое количество символов с языков, отличных от английского, то есть BMö26(šÀ2ÿÿÿÿÿÿÿÿ и т. Д. Для нескольких десятков строк.

Как я могу сделать изображение?

Заранее спасибо,

Джон

 $sqlStr = "SELECT s.title, s.datesubmitted, s.text1, s.text2, s.text3, s.cleanurl1, s.cleanurl2, s.cleanurl3, s.submissionid, i.image_id, i.filename, i.mime_type, i.file_size, i.file_data, i.photonumber FROM submission s JOIN images2 i on s.submissionid = i.submissionid GROUP BY s.submissionid ORDER BY s.datesubmitted DESC LIMIT $offset, $rowsperpage"; $tzFrom = new DateTimeZone('America/New_York'); $tzTo = new DateTimeZone('America/Phoenix'); // echo $dt->format(DATE_RFC822); $result = mysql_query($sqlStr); //header('Content-type: image/bmp'); $arr = array(); echo "<table class=\"samplesrec\">"; while ($row = mysql_fetch_array($result)) { //header('Content-type: ' . $row['mime_type']); //header('Content-length: ' . $row['file_size']); $dt = new DateTime($row["datesubmitted"], $tzFrom); $dt->setTimezone($tzTo); echo '<tr class="class3a">'; echo '<td class="sitename1"><a href="http://www...com/blog">'.$row["title"].'</a></td>'; echo '</tr>'; echo '<tr class="class3b">'; echo '<td class="sitename2name">'.$dt->format('F j, Y &\nb\sp &\nb\sp g:i a').'</td>'; echo '</tr>'; echo '<tr class="class3c">'; echo '<td class="sitename2">'.$row["text1"].'</td>'; echo '</tr>'; echo '</tr>'; echo '<tr class="class3c">'; echo '<td class="sitename2">'.$row["file_data"].'</td>'; echo '</tr>'; } echo "</table>"; 

Это потому, что ваш браузер не понимает, что данные, которые вы отправляете назад, являются изображением. Когда ваш веб-сервер отвечает на запрос, он указывает тип содержимого (следовательно, заголовок Content-Type), а ваша страница указывается как текст. Вот почему используются теги изображений: они дают вам возможность сказать «встроить этот другой ресурс в это место». Что делает ваш код – это выгрузить двоичные данные изображения в виде текста на экран – не то, что вы хотите.

Вам нужно создать другую страницу PHP, такую ​​как getImage.php, которая принимает параметр $ _GET (т. Е. Идентификатор строки). Затем эта страница будет запрашивать базу данных и отображать данные изображения, указывая заголовок Content-Type.

Вот некоторые доказательства концептуального кода, который я написал без тестирования, и который не обрабатывает SQL-инъекцию или ряд других потенциальных проблем.

 header('Content-Type: image/png'); //change to the proper content type for your type of image $imageID = mysql_real_escape_string($_GET['q']); $result = mysql_query(sprintf('SELECT file_data FROM images2 WHERE id="%s" AND file_data IS NOT NULL LIMIT 1', $_GET['q'])); if(mysql_num_rows($result) !== 1) { //a row wasn't found, so 404 header('HTTP/1.0 404 File Not Found'); } else { $row = mysql_fetch_object($result); echo $row['file_data']; } 

Теперь, когда вы создаете свой HTML в своем существующем файле, вы будете делать что-то вроде этого:

 echo '<td class="sitename2"><img src="./getImage.php?q='.$row["id"].'"/></td>'; 

Корректировка имен столбцов SQL соответственно.

Приветствия.

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

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

то, что вы должны делать, это создать отдельный файл с именем image.php и получить его для создания изображения от имени вас.

например:

 <?php if(!empty($_GET['id']) && is_numeric($_GET['id'])) { //fetch the information for the database //if the blob data is of the content type image/gif for instance header('content-type: image/gif'); echo $result['image_data']; } 

а затем в вашей html-странице попросите image.php создать изображение для oyu.

  <img src="image.php=<?php echo $result['image_id'] ?>" />