Dzieje się tak, ponieważ Twoja przeglądarka nie zdaje sobie sprawy, że dane, które odsyłasz, to obraz. Gdy serwer WWW odpowiada na żądanie, określa typ treści (stąd nagłówek Content-Type), a strona jest określana jako tekst. Dlatego używa się tagów graficznych:dają one możliwość powiedzenia „umieść ten inny zasób w tej lokalizacji”. To, co robi Twój kod, to zrzucanie danych binarnych obrazu jako tekstu na ekran – nie tego, czego chcesz.
To, co musisz zrobić, to utworzyć kolejną stronę PHP, taką jak getImage.php, która akceptuje parametr $_GET (tj. identyfikator wiersza). Ta strona następnie prześle zapytanie do bazy danych i echo
dane obrazu, określając nagłówek Content-Type.
Oto kilka przykładów kodu koncepcyjnego, który napisałem bez testowania i który nie obsługuje wstrzykiwania SQL ani szeregu innych potencjalnych problemów.
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'];
}
Teraz, gdy budujesz kod HTML w istniejącym pliku, możesz zrobić coś takiego:
echo '<td class="sitename2"><img src="./getImage.php?q='.$row["id"].'"/></td>';
Dostosuj odpowiednio nazwy kolumn SQL.
Pozdrawiam.