Het is omdat uw browser niet beseft dat de gegevens die u terugstuurt een afbeelding zijn. Wanneer uw webserver op een verzoek reageert, specificeert hij het type inhoud dat het is (vandaar de Content-Type-header) en wordt uw pagina gespecificeerd als tekst. Dit is de reden waarom afbeeldingstags worden gebruikt:ze geven je de kans om te zeggen "embedden deze andere bron op deze locatie". Wat uw code doet, is de binaire gegevens van de afbeelding als tekst op het scherm dumpen - niet wat u wilt.
Wat u moet doen, is een andere PHP-pagina maken, zoals getImage.php, die een $_GET-parameter accepteert (dwz een rij-ID). Die pagina zal dan de database opvragen en echo
de afbeeldingsgegevens, met vermelding van de kop Content-Type.
Hier is wat proof-of-concept-code die ik heb geschreven zonder te testen en die geen SQL-injectie of een aantal andere potentiële problemen aankan.
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'];
}
Als u nu uw HTML in uw bestaande bestand bouwt, zou u zoiets als dit doen:
echo '<td class="sitename2"><img src="./getImage.php?q='.$row["id"].'"/></td>';
Uw SQL-kolomnamen dienovereenkomstig aanpassen.
Proost.