Как я могу хранить и получать изображения из базы данных MySQL, используя PHP?

StackOverflow https://stackoverflow.com/questions/1636877

  •  06-07-2019
  •  | 
  •  

Вопрос

Как я могу вставить изображение в 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 не было доступа к этому изображению

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top