J'ai creusé mon cerveau en essayant de comprendre pourquoi une image ne s'affiche pas en utilisant Php PDO avec elle stockée dans Sql Server 2016 comme un champ Varbinary Max. J'utilise Php 7, et je travaille sur Php 5 en utilisant le même code, mais avec MySql. Je veux passer à Sql Server à la place. Lorsque je l'affiche, tout ce que je reçois est une image brisée, mais dans le code source, elle montre les données d'image. Il est codé en utilisant base64, et j'utilise une boucle while pour récupérer les enregistrements. Mon code est ci-dessous.Impossible d'afficher l'image à partir de SQL Server en utilisant PHP PDO utilisant Varbinary Max
L'insertion qui fonctionne bien et je peux voir l'image dans la base de données.
$sql1 = "INSERT INTO weather_stories (filedate, text, imgfile)
VALUES (:filedate, :text, :imgfile)";
$preparedStatement = $conn->prepare($sql1);
$preparedStatement->bindParam(':filedate', $_POST['filedate']);
$preparedStatement->bindParam(':text', $_POST['text']);
$preparedStatement->bindParam(':imgfile', $output, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
$preparedStatement->execute();
l'image Affichage:
$sql = "SELECT TOP (2) id, filedate, imgfile, text, adddatetime, CONCAT(ROUND(DATALENGTH(imgfile)/1024, 1), 'k') as size
FROM weather_stories
ORDER BY adddatetime DESC";
// use exec() because no results are returned
$preparedStatement = $conn->prepare($sql);
$preparedStatement->execute();
//retrieve records
while ($row = $preparedStatement->fetch()) {
//create table
echo "<tr>";
echo "<td>" . $row['filedate'] . "</td>";
echo "<td>" . $row['text'] . "</td>";
echo "<td>" . $row['adddatetime'] . "</td>";
echo "<td>" . $row['size'] . "</td>";
echo "</tr>";
echo "<tr>";
echo "<td><a href='viewws.php?id=" . $row['id'] . "'>";
echo "<img width='300' height='300' src='data:image/png;base64," . base64_encode($row['imgfile']) . "' />";
echo "</a></td>";
echo "<td><a href='#' id=" . $row['id'] . " class='deletews'>Delete</a></td>";
echo "</tr>";
}
Je ne comprends pas pourquoi ce travail ne marche pas dans une balise img. Tout ce qu'il affiche est l'icône de l'image brisée, mais quand vous regardez le code source de la page, il montre les données après les données: tag dans l'image.
J'ai cherché partout une solution à ceci même ici et rien ne fonctionne. Je le soupçonne peut-être avec le fetch mais je ne sais pas pourquoi, car il y a une documentation limitée sur le web à ce sujet.
L'aide serait appréciée. Merci!
L'étape 1 consiste à sélectionner un enregistrement unique et à sortir les données d'image binaire directement sur la page pour voir si c'est une image valide. Utilisez un appel approprié à 'header()' pour définir le type de contenu. – miken32
Aussi utile de savoir: https://msdn.microsoft.com/en-us/library/bb522494.aspx – miken32