Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Bild aus MySQL-Datenbank wird nicht gedruckt

Das liegt daran, dass Ihr Browser nicht erkennt, dass die Daten, die Sie zurücksenden, ein Bild sind. Wenn Ihr Webserver auf eine Anfrage antwortet, gibt er den Inhaltstyp an (daher der Content-Type-Header), und Ihre Seite wird als Text angegeben. Aus diesem Grund werden Bild-Tags verwendet:Sie geben Ihnen die Möglichkeit zu sagen:"Diese andere Ressource an dieser Stelle einbetten". Ihr Code gibt die binären Daten des Bildes als Text auf dem Bildschirm aus - nicht das, was Sie wollen.

Was Sie tun müssen, ist eine weitere PHP-Seite wie getImage.php zu erstellen, die einen $_GET-Parameter (dh eine Zeilen-ID) akzeptiert. Diese Seite wird dann die Datenbank abfragen und echo die Bilddaten unter Angabe des Content-Type-Headers.

Hier ist ein Proof-of-Concept-Code, den ich ohne Tests geschrieben habe und der keine SQL-Injection oder eine Reihe anderer potenzieller Probleme behandelt.

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

Wenn Sie nun Ihren HTML-Code in Ihrer bestehenden Datei erstellen, würden Sie etwa so vorgehen:

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

Passen Sie Ihre SQL-Spaltennamen entsprechend an.

Prost.