Невозможно отобразить изображение с Sql Server, используя PHP PDO, используя Varbinary Max

Я ломал голову, пытаясь понять, почему изображение не будет отображаться с использованием Php PDO, если оно хранится в Sql Server 2016 как поле Varbinary Max. Я использую Php 7, и это работает на Php 5, используя тот же код, но с MySql. Я хочу перейти на Sql Server вместо этого.

Когда я показываю все это, я получаю разбитое изображение, но в исходном коде он показывает данные изображения. Он кодируется с использованием base64, и я использую цикл while для извлечения записей. Мой код ниже.

Вставка, которая отлично работает, и я могу просмотреть изображение в базе данных.

$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();

Отображение изображения:

$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>";
}

Я не понимаю, почему это не работает в теге img. Все, что он отображает, это значок разбитого изображения, но когда вы смотрите на исходный код страницы, он показывает данные после тега data: на изображении.

Я искал решение этой проблемы даже здесь, и ничего не работает. Я подозреваю, что это может быть с извлечением, но не знаю почему, так как в Интернете имеется ограниченная документация по этому поводу.

Помощь будет оценена. Спасибо!

0

Решение

Я понял это, просто поиграв с некоторыми идеями, которые нашел,

echo '<img src="data:image/png;base64,' . base64_encode(hex2bin($row['imgfile']))  . '" >';

Изображение должно было быть hex2bin 1st, затем base64-кодированным, и теперь оно отображает изображение правильно. Я думал, что пробовал это раньше, и это не сработало, если я не пропустил что-то, но я хотел бы, чтобы был более легкий путь к этому.

Также не работает метод header (), он дает черный экран, и изображение не может быть отображено из-за ошибок в Firefox. Я пробовал это раньше и та же проблема. Я понятия не имею, почему это работает на некоторых, а не здесь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]