Бесплатная миграция IT-инфраструктуры в облако

База данных фото с помощью HTML, PHP и MySQL

Никита Кулижников
Никита Кулижников
Технический писатель
18 апреля 2022 г.
4798
5 минут чтения
Средний рейтинг статьи: 5

Хранение изображений в базе данных вместе с другой информацией удобно, когда в вашем приложении заявлена сильная привязка к БД. Так, синхронизировать изображения с другими данными нужно, если вы разрабатываете программу для контрольно-пропускной системы — вместе с личными данными нужно хранить ещё и фотографию для того, чтобы идентифицировать личность.

База Данных Фото С Помощью Html, PHP И My SQL

Для хранения такого контента предусмотрен специальный тип данных MySQL — BLOB. Он вмещает в себя большие двоичные данные: изображения, PDF или прочие мультимедиа-файлы. 

Альтернатива использованию BLOB-типа — хранение изображений внутри файловой системы. Но в таком случае мы делаем приложение менее портативным и безопасным — появляется как минимум два тесно связанных модуля: файловая система и база данных. Кроме того, при создании резервных копий не нужно будет делать снимки каталогов системы, достаточно сохранять дампы таблиц MySQL.

cloud

В этой статье мы будем разбираться с базой данных фото на примере стека LAMP — Linux, Apache2, MySQL, PHP. Серверы с такой конфигурацией вы можете заказать на timeweb.cloud. Для работы с сервером вам понадобится пользователь с привилегиями sudo. О том, как настроить эти привилегии, читайте в статье нашего блога «Редактирование файла sudoers»

Рассмотрим все этапы работы на примере приложения контрольно-пропускной системы вуза. 

Создание базы данных

Для начала создадим базу данных для нового проекта. Можно сделать это через консоль или любой интерфейс СУБД, например, phpminiadmin. Мы воспользуемся первым вариантом. 

Подключаемся к серверу через ssh и входим на сервер MySQL с привилегиями суперпользователя:

sudo mysql -u root -p

Затем запустим команду для создания базы данных. Назовём её control_access:

mysql> CREATE DATABASE control_access;

После создания увидим фразу: Query OK, 1 row affected (0.01 sec). Это значит, что база данных успешно создана, можем приступать к работе с таблицами. 

Но перед этим для безопасности нужно создать отдельного пользователя, который будет работать только с этой базой. Для удобства назовём его также, как и базу данных:

mysql> CREATE USER 'control_access'@'localhost' IDENTIFIED BY 'Pas$w0rd!';

где passw0rd — ваш надёжный пароль. Теперь предоставим ему права на все операции с базой данных control_access:

mysql> GRANT ALL PRIVILEGES ON control_access.* TO 'control_access'@'localhost';

После этого нужно очистить таблицу прав доступа, чтобы MySQL применила изменения:

mysql> FLUSH PRIVILEGES;

Теперь и правда можно приступить к созданию таблиц. В нашем случае ограничимся таблицей students, в ней будем хранить информацию о студентах, их фото и права доступа. На её примере также реализуем хранение картинок в базе данных mysql.

Зайдём в MySQL из-под вновь созданного пользователя control_access:

mysql -u control_access -p

Переключаемся на ожноимённую базу данных:

mysql> USE 'control_access';

… и создаём таблицу students:

CREATE TABLE `students` (
    id INT PRIMARY KEY COMMENT "Идентификатор студента",
    name VARCHAR(200) NOT NULL COMMENT "ФИО студента",
    access_rights ENUM ('full', 'extended', 'basic', 'denied') DEFAULT 'basic' COMMENT "Права доступа",
    userpic BLOB COMMENT "Фото студента",
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT "Дата регистрации"
) ENGINE = InnoDB;
  1. id — первичный ключ таблицы, цифровой идентификатор студентов. При добавлении новых записей MySQL будет самостоятельно генерировать идентификаторы в порядке возрастания, потому что мы использовали ключевое слово AUTO_INCREMENT
  2. name — ФИО студента. Используем тип данных VARCHAR с ограничением 200, потому что нам не понадобится больше 200 символов для ФИО.
  3. access_rights — права доступа. Тип ENUM предполагает, что будет выбрано одно значение из перечня.
  4. userpic — фотография студента, тип данных BLOB будет хранить данные в двоичном формате
  5. created_at — дата создания записи. При добавлении новой записи MySQL автоматически добавит в этот столбец текущую временную метку.

Для хранения данных мы выбрали InnoDB, что позволит нам использовать широкий набор функций, например, транзакции MySQL.

Создание PHP-скриптов для заполнения БД

Таблица students готова к заполнению, теперь можно загружать туда данные. Напишем PHP-скрипт, который будет регистрировать студентов в системе и добавлять данные в `students`.

Сначала создадим конфигурационный файл с подключением к базе данных, назовём его config.php:

Image4

Для работы с базой данных используем драйвер PDO. В него передаём параметры подключения — имя базы данных, имя пользователя, пароль и адрес сервера, на котором база располагается. 

Теперь создадим скрипт для наполнения нашей таблицы тестовыми данными.

Image3

Здесь мы подключились к базе данных, затем вставили в неё нужные данные. В этом скрипте наглядно понятно, как добавить картинку в базу данных sql, — нужно просто поместить её содержимое в соответствующее поле. Для получения содержимого файла мы воспользовались встроенной php-функцией file_get_contents.

Затем каждый из элементов массива в цикле вставили в базу данных с помощью выражения INSERT.

Отображение информации

Мы разместили в базе данных информацию о студентах, теперь нужно вывести данные. Для удобства мы просто отобразим всё, что есть в таблице на отдельной странице view.php.

Image2

Здесь мы снова использовали подключение к pdo, внутри файла config.php, затем запросили выборку всех студентов с помощью выражения SELECT * FROM students

Все полученные данные вывели в таблицу HTML. 

Image1

Чтобы вывести данные, хранящиеся в объекте BLOB, в браузер, мы закодировали данные в формат base64 с помощью встроенной функции php и использовали следующий синтаксис при указании источника изображения в теге img:

data:{type};base64, {data}, где {type} — тип данных, в нашем случае image/png, а {data} — данные base64.

Подготовили для вас выгодные тарифы на облачные серверы 

Заключение

В статье на учебном примере с контрольно-пропускной системой для студентов мы разобрались, как хранить изображения в базе данных, используя тип данных BLOB, и определили его основное преимущество по сравнению с хранением данных в файловой системе. 

Кроме этого мы научились вставлять медиа-файлы в поля типа BLOB в MySQL, а также выводить их в браузер.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
18 апреля 2022 г.
4798
5 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев