È perché il tuo browser non si rende conto che i dati che stai inviando sono un'immagine. Quando il tuo server web risponde a una richiesta, ha specificato il tipo di contenuto che è (da cui l'intestazione Content-Type) e la tua pagina viene specificata come testo. Questo è il motivo per cui vengono utilizzati i tag immagine:ti danno la possibilità di dire "incorpora quest'altra risorsa in questa posizione". Quello che fa il tuo codice è scaricare i dati binari dell'immagine come testo sullo schermo, non quello che vuoi.
Quello che devi fare è creare un'altra pagina PHP, come getImage.php, che accetti un parametro $_GET (cioè un ID riga). Quella pagina interrogherà quindi il database e echo
i dati dell'immagine, specificando l'intestazione Content-Type.
Ecco un codice proof of concept che ho scritto senza test e che non gestisce SQL injection o una serie di altri potenziali problemi.
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'];
}
Ora, quando crei il tuo HTML nel tuo file esistente, faresti qualcosa del genere:
echo '<td class="sitename2"><img src="./getImage.php?q='.$row["id"].'"/></td>';
Modificare di conseguenza i nomi delle colonne SQL.
Saluti.