Как я могу восстановить или получить доступ к полю больших двоичных объектов MySQL, чтобы я мог предварительно просмотреть его как HTML с помощью кодов PHP? Есть ли доступная функция в PHP, чтобы я мог сохранить это поле blob в формате jpeg.

php
2
aintgel 4 Янв 2011 в 06:33

2 ответа

Лучший ответ

Хранить легко. Предполагая, что у вас есть таблица mysql с полем BLOB для изображений ....

После загрузки изображения вы получаете содержимое файла в память, а затем вставляете его в поле большого двоичного объекта.

<?php 

 $file = '/tmp/MyImg.jpg'; 
 // you migh want to escape it just in case
 $data = file_get_contents($file); 
 // Insert into database
 $sql = "INSERT INTO my_picture_table (`picture_blob_field`) VALUES ('$data');"

 ?>

Получение также довольно просто. Проще сделать отдельный файл для загрузки изображений из blob.

<?php
// file = getPicture.php

$id = (int) $_GET['id'];
$sql = "SELECT `picture_blob_field` FROM `my_picture_table` WHERE `id` = $id"
// query the db
// store data into var $picData

// Set the content type and print the data.
header("Content-type: img/jpeg");
echo $picData;

?>

Это все, что вам нужно сделать ... Теперь на странице HTML просто создайте

<img scr="getPicture.php?id=PICTURE_ID alt="blah blah" />

Обратите внимание, что приведенный выше пример относится к типу JPEG, сохраните тип файла в базе данных, а затем используйте его, чтобы указать тип файла с помощью header("Content-type: img/xxx")

Надеюсь, это решило вашу проблему.


Я нашел пример / руководство по хранению изображений в mysql. Если выше не ясно, просмотрите код (он разбит на страницы, поэтому посмотрите на другие страницы)

3
Alex 4 Янв 2011 в 09:09
Я пробовал то, что вы предложили выше, но до этого мои действия заключались в создании имени файла CompanyLogo.jpg с помощью функции «touch» в PHP и сохранении двоичного файла в CompanyLogo.jpg с помощью функции fwrite. Я не знаю, какой код более разумен, потому что сейчас самое важное для моего босса - увидеть результат.
 – 
aintgel
4 Янв 2011 в 11:31
Что ж ... в этом случае вы можете попробовать использовать MySql Workbench (wb.mysql.com) или MySql Query Браузер. Он будет отображать blob как реальное изображение (когда поле открыто). Хорошее решение для среды разработки. Вы также можете "Сохранить как" содержимое поля как изображение с помощью нескольких щелчков мышью.
 – 
Alex
4 Янв 2011 в 18:50

Представленный выше код уязвим для атак с использованием SQL-инъекций и в любом случае выйдет из строя на первом байте JPEG, который соответствует коду ASCII для знака кавычек (что должно произойти довольно быстро). Я действительно вижу ваш комментарий о том, что вы «можете» захотеть избежать данных, но следует подчеркнуть, что в большом двоичном файле почти наверняка будет байт, который соответствует кавычкам. Это не «на всякий случай», это практически каждый случай.

Используйте mysql_real_escape_string () для данных JPEG и параметра id (который исходит от пользователя, который может быть вредоносным). А еще лучше использовать PDO и подстановку параметров, чтобы избежать этого беспорядка.

Кроме того, тип содержимого должен быть image / jpeg, а не img / jpeg.

1
Tom Boutell 28 Авг 2011 в 05:13