Това е така, защото вашият браузър не осъзнава, че данните, които изпращате обратно, са изображение. Когато вашият уеб сървър отговори на заявка, той указва вида на съдържанието, което е (оттук и заглавката Content-Type) и вашата страница се посочва като текст. Ето защо се използват етикети за изображения:те ви дават възможност да кажете „вградете този друг ресурс на това място“. Това, което вашият код прави, е да изхвърли двоичните данни на изображението като текст на екрана - не това, което искате.
Това, което трябва да направите, е да създадете друга PHP страница, като getImage.php, която приема параметър $_GET (т.е. идентификатор на ред). След това тази страница ще направи заявка към базата данни и echo
данните за изображението, указвайки заглавката 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 колони.
Наздраве.