Как я могу вставить изображение в 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($_FILES['userfile']['name']) ); mysql_query($sql);
Вы можете отображать изображение из базы данных на веб-странице с помощью:
$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);
Вместо хранения изображений в базе данных они хранят их в папке на вашем диске и сохраняют их местоположение в вашей базе данных.
Помните, что обслуживание изображений из БД обычно намного, намного медленнее, чем обслуживание их с диска.
Вы начнете процесс PHP, открыв соединение с БД, имея данные чтения БД с одного и того же диска и ОЗУ для кеша, поскольку файловая система будет передавать его по нескольким сокетам и буферам, а затем выталкивать через PHP, который по умолчанию делает он не кэшируется и добавляет накладные расходы на кодирование HTTP.
Современные веб-серверы OTOH могут обслуживать изображения только с несколькими оптимизированными вызовами ядра (файл с памятью и область памяти, переданная в стек TCP), так что они даже не копируют память, и накладные расходы практически отсутствуют.
Это разница между возможностью одновременного отображения 20 или 2000 изображений на одной машине.
Поэтому не делайте этого, если вам абсолютно не нужна транзакционная целостность (и на самом деле даже это можно сделать только с метаданными изображения в процедурах очистки базы данных и файловой системы) и знать, как улучшить обработку PHP-запросов HTTP, подходящую для изображений.
Я также рекомендую подумать об этом, а затем выбрать сохранение изображений в вашей файловой системе, а не в БД .. см. здесь: Хранение изображений в БД – Да или Нет?
Мое мнение заключается в том, что вместо хранения изображений непосредственно в базе данных рекомендуется сохранять местоположение изображения в базе данных. Поскольку мы сравниваем оба варианта, сохранение изображений в базе данных безопасно для целей безопасности. Недостатком является
Если база данных повреждена, нет способа получить ее.
Получение файлов изображений из db происходит медленно, если сравнивать их с другими параметрами.
С другой стороны, сохранение расположения файла изображения в db будет иметь следующие преимущества.
Его легко получить.
Если хранится более одного изображения, мы можем легко получить информацию об изображении.
Лично я не буду хранить изображение в базе данных, вместо этого поставьте его в папку, недоступную извне, и используйте базу данных для отслеживания ее местоположения. уменьшает размер базы данных, и вы можете просто включить его с помощью PHP. Не было бы никакого способа, чтобы PHP не получал доступ к этому изображению, тогда