Как я могу хранить и получать изображения из базы данных MySQL, используя PHP?
Вопрос
Как я могу вставить изображение в MySQL, а затем извлечь его с помощью PHP?
У меня ограниченный опыт в обеих областях, и я мог бы использовать небольшой код, чтобы начать понимать это.
Решение
Сначала вы создаете таблицу MySQL для хранения изображений, например:
create table testblob (
image_id tinyint(3) not null default '0',
image_type varchar(25) not null default '',
image blob not null,
image_size varchar(25) not null default '',
image_ctgy varchar(25) not null default '',
image_name varchar(50) not null default ''
);
Затем вы можете записать изображение в базу данных, например:
/***
* All of the below MySQL_ commands can be easily
* translated to MySQLi_ with the additions as commented
***/
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
// mysqli
// $link = mysqli_connect("localhost", $username, $password,$dbname);
$sql = sprintf("INSERT INTO testblob
(image_type, image, image_size, image_name)
VALUES
('%s', '%s', '%d', '%s')",
/***
* For all mysqli_ functions below, the syntax is:
* mysqli_whartever($link, $functionContents);
***/
mysql_real_escape_string($size['mime']),
mysql_real_escape_string($imgData),
$size[3],
mysql_real_escape_string( Сначала вы создаете таблицу MySQL для хранения изображений, например:
create table testblob (
image_id tinyint(3) not null default '0',
image_type varchar(25) not null default '',
image blob not null,
image_size varchar(25) not null default '',
image_ctgy varchar(25) not null default '',
image_name varchar(50) not null default ''
);
Затем вы можете записать изображение в базу данных, например:
$link = mysql_connect("localhost", "username", "password");
mysql_select_db("testblob");
$sql = "SELECT image FROM testblob WHERE image_id=0";
$result = mysql_query("$sql");
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
mysql_close($link);
Вы можете отобразить изображение из базы данных на веб-странице с помощью:
<*>FILES['userfile']['name'])
);
mysql_query($sql);
Вы можете отобразить изображение из базы данных на веб-странице с помощью:
<*>Другие советы
Вместо того, чтобы хранить изображения в базе данных, храните их в папке на диске и сохраняйте их расположение в базе данных.
Помните, что подача изображений из БД обычно намного, намного намного медленнее, чем их передача с диска. Р>
Вы будете запускать процесс PHP, открывать соединение с БД, иметь БД, считывающую данные изображения с того же диска и ОЗУ для кэша, что и файловая система, передавая их через несколько сокетов и буферов, а затем выталкивая их через PHP, что по умолчанию делает его не кэшируемым и добавляет накладные расходы на фрагментированную кодировку HTTP.
Современные веб-серверы OTOH могут обслуживать изображения с помощью всего лишь нескольких оптимизированных вызовов ядра (отображенный в памяти файл и эта область памяти, передаваемая в стек TCP), так что они даже не копируют память и почти не используют служебные данные.
В этом заключается разница между возможностью обслуживать 20 или 2000 изображений параллельно на одном компьютере.
Так что не делайте этого , если только вам абсолютно не нужна целостность транзакций (а на самом деле даже это можно сделать с помощью только метаданных изображений в БД и процедурах очистки файловой системы) и вы не знаете, как улучшить обработку HTTP в PHP быть подходящим для изображений.
Я также рекомендую подумать об этом, а затем выбрать сохранение изображений в вашей файловой системе, а не в БД. см. здесь: Хранение изображений в БД - да или нет? р>
Мое мнение таково: вместо хранения изображений непосредственно в базе данных рекомендуется сохранять местоположение изображений в базе данных. Поскольку мы сравниваем оба варианта, хранение изображений в базе данных является безопасным в целях безопасности. Недостатком являются
<Ол>Если база данных повреждена, восстановить невозможно. Р>
Извлечение файлов изображений из базы данных происходит медленно, если сравнивать с другими параметрами.
С другой стороны, сохранение расположения файла изображения в БД будет иметь следующие преимущества.
<Ол>Его легко получить.
Если хранится более одного изображения, мы можем легко получить информацию об изображении. Р>
Лично я не буду хранить изображение в базе данных, вместо этого поместите его в папку, к которой нет доступа извне, и используйте базу данных для отслеживания его местоположения. уменьшает размер базы данных, и вы можете просто включить его с помощью PHP. Тогда бы без PHP не было доступа к этому изображению