Прежде всего помните, что у метода хранения изображений в базе данных есть свои плюсы и минусы.
+ Файлы проекта хранятся централизовано (что особенно хорошо при командной разработке).
+ Доступ к файлам в любом случае будет осуществляться через скрипт-загрузчик, что дает возможность более гибко контролировать этот процесс.
— Доставка файла скриптом из БД будет с большей вероятностью проходить медленнее чем апачем из файловой системы.
— В целом дамп БД будет слишком большим и, возможно, репликация будет требовать широких каналов между удаленными серверами. Также такой дамп будет трудно читаем по F3, т.к. бинарные данные будут смешаны с другими данными.
Ну а после эдакого вступления приступим к кодированию.
Прежде всего будем считать, что начальным источником изображения является локальный файл. Откроем его и считаем информацию. После чего добавим её в базу, вычитаем из базы и выведем на экран.
<?php $fileName = "77525-1920x1080.jpg"; //имя файла $f = fopen($fileName,"r"); //открываем файл $read = fread($f,filesize($fileName)); //считываем содержимое fclose($f); //закрываем файл $conn = mysql_connect("localhost", "name", "password"); //соединяемся с сервером базы данных ! введите свои данные mysql_select_db("my_db"); //выбираем базу данных $img = addslashes($read); //приводим содержимое файла в пригодный для сохранения вид $result = mysql_query("INSERT INTO imgs (img) VALUES('$img')",$conn); //вставляем в базу данных новую запись if ($result == 'true') { //если всё прошло гладко запрашиваем строку и выводим на экран mysql_free_result($result); $sql = "SELECT * FROM imgs ORDER BY id DESC LIMIT 1"; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); $pic = $row["img"]; mysql_free_result($result); ob_end_clean(); //очищает буфер вывода и отключает буферизацию вывода header("Content-Type: image/jpg"); //указываем браузеру что это изображение echo $pic; //выводим данные } ?>
При этом таблица imgs у меня имела такой вид:
CREATE TABLE `img` ( `id` int(11) NOT NULL auto_increment, `img` blob, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Примите во внимание, что таким образом сохранить выйдет только изображения до 2 Гб. Можно использовать LONGBLOB — 4 Гб, хотя врядли єто понадобится.