Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'image de la base de données MySQL ne s'imprime pas

C'est parce que votre navigateur ne se rend pas compte que les données que vous renvoyez sont une image. Lorsque votre serveur Web répond à une requête, il spécifie le type de contenu dont il s'agit (d'où l'en-tête Content-Type), et votre page est spécifiée sous forme de texte. C'est pourquoi les balises d'image sont utilisées :elles vous permettent de dire "intégrez cette autre ressource à cet emplacement". Ce que fait votre code est de vider les données binaires de l'image sous forme de texte sur l'écran - pas ce que vous voulez.

Ce que vous devez faire est de créer une autre page PHP, telle que getImage.php, qui accepte un paramètre $_GET (c'est-à-dire un identifiant de ligne). Cette page interrogera ensuite la base de données et echo les données d'image, en spécifiant l'en-tête Content-Type.

Voici un code de preuve de concept que j'ai écrit sans test et qui ne gère pas l'injection SQL, ou un certain nombre d'autres problèmes potentiels.

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'];
}

Maintenant, lorsque vous créez votre code HTML dans votre fichier existant, vous feriez quelque chose comme ceci :

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

Ajustez vos noms de colonnes SQL en conséquence.

Bravo.