Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Кратко о задаче
Для начала создадим базу данных для нового проекта. Можно сделать это через консоль или любой интерфейс СУБД, например, phpminiadmin. Мы воспользуемся первым вариантом.
Подключаемся к серверу через ssh и входим на сервер MySQL с привилегиями суперпользователя:
Затем запустим команду для создания базы данных. Назовём её 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;- id — первичный ключ таблицы, цифровой идентификатор студентов. При добавлении новых записей MySQL будет самостоятельно генерировать идентификаторы в порядке возрастания, потому что мы использовали ключевое слово AUTO_INCREMENT
- name — ФИО студента. Используем тип данных VARCHAR с ограничением 200, потому что нам не понадобится больше 200 символов для ФИО.
- access_rights — права доступа. Тип ENUM предполагает, что будет выбрано одно значение из перечня.
- userpic — фотография студента, тип данных BLOB будет хранить данные в двоичном формате
- created_at — дата создания записи. При добавлении новой записи MySQL автоматически добавит в этот столбец текущую временную метку.
Для хранения данных мы выбрали InnoDB, что позволит нам использовать широкий набор функций, например, транзакции MySQL.
Создание PHP-скриптов для заполнения БД
Таблица students готова к заполнению, теперь можно загружать туда данные. Напишем PHP-скрипт, который будет регистрировать студентов в системе и добавлять данные в students.
Сначала создадим конфигурационный файл с подключением к базе данных, назовём его config.php:
Для работы с базой данных используем драйвер PDO. В него передаём параметры подключения — имя базы данных, имя пользователя, пароль и адрес сервера, на котором база располагается.
Теперь создадим скрипт для наполнения нашей таблицы тестовыми данными.
Здесь мы подключились к базе данных, затем вставили в неё нужные данные. В этом скрипте наглядно понятно, как добавить картинку в базу данных sql, — нужно просто поместить её содержимое в соответствующее поле. Для получения содержимого файла мы воспользовались встроенной php-функцией file_get_contents.
Затем каждый из элементов массива в цикле вставили в базу данных с помощью выражения INSERT.
Мы разместили в базе данных информацию о студентах, теперь нужно вывести данные. Для удобства мы просто отобразим всё, что есть в таблице на отдельной странице view.php.
Здесь мы снова использовали подключение к pdo, внутри файла config.php, затем запросили выборку всех студентов с помощью выражения SELECT * FROM students.
Все полученные данные вывели в таблицу HTML.
Чтобы вывести данные, хранящиеся в объекте BLOB, в браузер, мы закодировали данные в формат base64 с помощью встроенной функции php и использовали следующий синтаксис при указании источника изображения в теге img:
data:{type};base64, {data}, где {type} — тип данных, в нашем случае image/png, а {data} — данные base64.
Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.