sql >> Database >  >> RDS >> Mysql

Afbeelding uit MySQL-database wordt niet afgedrukt

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.



  1. PostgreSQL hstore/json gebruiken met JdbcTemplate

  2. Is de puntkomma nodig in SQL?

  3. Resultaten van een zoekopdracht binnen dezelfde zoekopdracht gebruiken

  4. Meertalig gegevenstype in MYSQL