Включите исполнение JavaScript в браузере, чтобы запустить приложение.
28 апр 2025

Работа с базами данных в PHP

Сочетание языка PHP с базами данных используется для создания сайтов. Но чтобы получить доступ к данным, нужно сначала подключиться к базе. Это важно сделать корректно: ошибки на начальном этапе могут привести к последующим проблемам. Опишем тонкости подключения к популярным СУБД при разработке на PHP.

Что такое базы данных и зачем они нужны

База данных — это организованное хранилище структурированных данных. Оно нужно для накопления информации, доступа к ней и управления ею. Такие хранилища можно сравнить с каталогами библиотек. Базы данных помогают хранить и обрабатывать огромные объемы информации в структурированном виде. У пользователя появляется возможность быстрого доступа к нужным сведениям.

Вот основные функции баз данных:

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

Есть два основных вида СУБД:

  • реляционные — информация представлена в виде таблиц. Примеры: MySQL, PostgreSQL, SQL Server;
  • NoSQL — подходят для хранения неструктурированных данных. Примеры: MongoDB, Cassandra, Redis.

Любой IT-специалист должен понимать основные принципы работы с БД.

Самые популярные БД

MySQL. Реляционная база данных с открытым исходным кодом. Одна из самых известных СУБД в мире. Удобна для создания приложений, блог-платформ, интернет-магазинов, других онлайн-сервисов. Проста в использовании, надежна, легко масштабируется под проекты разного размера.

PostgreSQL. Еще одна мощная реляционная база данных. Отличается высокой производительностью, подходит для крупных корпоративных сервисов, для научных разработок.

MongoDB. Гибкая NoSQL-СУБД для хранения неструктурированных данных. Хорошо масштабируется под проекты разного размера. Подходит для больших хранилищ, для веб- и мобильных приложений.

Redis. Еще одна NoSQL-база данных. Хранит данные в оперативной памяти для быстрого доступа к ним. Часто используется в качестве кэша, хранилища сессий, для обмена сообщениями, ускорения работы приложений.

Microsoft SQL Server. Коммерческое решение от Microsoft для корпоративных приложений на базе Windows. Легко масштабируется, интегрируется с другими продуктами Microsoft.

SQLite3. Встраиваемая реляционная СУБД. Удобна для хранения данных мобильных приложений и небольших сайтов, не требует отдельного сервера.

Подключение PHP для поддержки баз данных

Расскажем, как работает PHP в связке с некоторыми популярными СУБД.

Для MySQL

Для работы PHP с MySQL нужно установить соединение через mysqli или PDO.

Вариант подключения через mysqli:

  • создаем объект mysqli с четырьмя параметрами: сервер, пользователь, пароль, БД;
  • проверяем соединение на предмет корректной работы;
  • работаем с базой;
  • отключаемся.

Пример:

copy

$conn = new mysqli("localhost", "user", "pass", "db");

if ($conn->connect_error) { die("Ошибка"); }

// ... работа с базой...

$conn->close();
php

Вариант подключения с PDO:

  • создаем объект PDO с DSN (строкой подключения) и учетными данными;
  • ловим ошибки командой try...catch;
  • работаем с базой;
  • отключаемся (присваиваем null).

Пример:

try {

 $conn = new PDO("mysql:host=localhost;dbname=db", "user", "pass");

 // ... работа с базой ...

} catch(PDOException $e) {

 echo "Ошибка: " . $e->getMessage();

}

$conn = null;
php

При любом раскладе важно соблюдать правила безопасности:

  • не храните данные доступа прямо в коде;
  • используйте подготовленные запросы для защиты от SQL-инъекций.

Вариант с mysqli проще конкретно для MySQL. При этом PDO универсальнее, так как поддерживает разные СУБД.

Для PostgreSQL

Для работы PHP с PostgreSQL всегда используется PDO — универсальный и безопасный вариант. Это делается так:

  • создаем объект PDO с DSN (строкой подключения), именем пользователя, паролем;
  • прописываем DSN для PostgreSQL: "pgsql:host=хост;port=порт;dbname=БД;user=пользователь;password=пароль";
  • настраиваем обработку исключений;
  • работаем с базой;
  • закрываем соединение (присваиваем null).

Пример:

try {

 $conn = new PDO("pgsql:host=localhost;port=5432;dbname=db;user=user;password=pass");

 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 // ... работа с базой ...

} catch (PDOException $e) {

 echo "Ошибка: " . $e->getMessage();

}

$conn = null;
php

Не забываем о безопасности, используем транзакции, обрабатываем ошибки. Здесь важно помнить несколько нюансов:

  • как и с MySQL, нельзя хранить данные доступа в коде;
  • используйте try...catch и исключения PDO;
  • подготовленные запросы защищают от SQL-инъекций;
  • транзакции объединяют запросы в одну операцию.

Для SQLite3

PHP подключается к SQLite3 через PDO. Для этого используется строка подключения вида "sqlite:путь_к_файлу_базы_данных". 

Новый файл базы данных создается при первом подключении.

Пример подключения (PDO):

$dbfile = "path/to/your/database.sqlite";

try {

  $conn = new PDO("sqlite:$dbfile");

  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  echo "Соединение установлено!";

} catch (PDOException $e) {

  echo "Ошибка: " . $e->getMessage();

}

$conn = null;
php

При работе с SQLite3 важно обрабатывать ошибки через try-catch.

Достоинства SQLite3:

  • простота (система не требует отдельного сервера);
  • компактность;
  • автономность (все данные хранятся в одном файле);
  • совместимость с мобильными приложениями.

При этом для высоконагруженных проектов она не подходит.

Функции PHP для работы с БД

Теперь расскажем чуть подробнее об основных функциях языка программирования PHP, полезных при работе с базами данных.

Подключение к серверу

PHP умеет соединяться с базами данных. Этот процесс начинается с подключения. Представьте, что это как звонок на нужный номер. PDO (PHP Data Objects) служит для управления разными данными (MySQL, PostgreSQL и т.д.).

Механизмы создания объекта PDO с указанием строки подключения (DSN) мы уже описали в предыдущих разделах. Как только объект готов можно отправлять запросы к базе данных. Простые запросы отправляются методом query(). Для более сложных и безопасных вариантов используются подготовленные запросы с prepare() и execute(). Полученные данные приходят в виде набора строк, которые можно использовать непосредственно в PHP.

Благодаря правильному использованию PDO с созданием строк подключения, подготовкой запросов, обработкой ошибок работа с базами данных становится надежнее и безопаснее. У разных баз данных есть свои особенности, но механизм подключения идентичен: создание соединения, отправка запросов, обработка результатов.

Подключение к конкретной базе данных

Принцип подключения через PDO у разных баз примерно одинаковый. Но везде есть свои нюансы. Например, для MySQL нужно указывать кодировку. PostgreSQL может потребовать порт. Важно учитывать эти детали для корректной работы с данными.

Синтаксис SQL-запросов, функции, типы данных тоже отличаются. Например, MySQL для ограничения результатов использует LIMIT, а PostgreSQL — FETCH FIRST ... ROWS ONLY. Соответственно, запросы приходится адаптировать.

Есть разница и в обработке ошибок. PDO перехватывает исключения, но сообщения об ошибках в разных СУБД разные. Но если держать в голове различия между разными системами, можно создавать приложения, совместимые с несколькими версиями ПО.

Отправка запроса

После подключения к базе нужны запросы для работы с ней. В их основе лежат стандартные SQL-команды:

  • получить данные (SELECT), 
  • добавить (INSERT), 
  • обновить (UPDATE, удалить (DELETE).

В PHP есть несколько способов работы с SQL-запросами. Самый простой – PDO::query(). Он подходит для простых запросов без параметров: 

result = $pdo->query("SELECT * FROM users");. 
php

Результатом становится массив, который можно обработать. Но этот способ небезопасен для пользовательских данных (возможны SQL-инъекции).

Безопасные запросы строятся на основе PDO::prepare() и PDOStatement::execute(). Они готовятся заранее. Затем значения подставляются методом execute(). Так быстрее и безопаснее:

$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");

$stmt->execute(['name' => $userName]);

$user = $stmt->fetch(PDO::FETCH_ASSOC);
php

Команда SELECT возвращает данные. INSERT, UPDATE, DELETE меняют их, а заодно могут вернуть количество затронутых строк (rowCount()).

Для обработки результатов есть следующие опции:

  • fetch() (одна строка);
  • fetchAll() (все строки); 
  • fetchObject() (как объекты). 

Команды fetch() и fetchAll() двигают курсор. Их нельзя вызывать по много раз.

Транзакции нужны для объединения запросов в одну операцию. Тут возможны разные варианты:

  • beginTransaction(), commit() (если нет ошибок);
  • rollBack() (если они есть).

Для отправки запросов есть разные варианты команд:

  • query (для простых запросов);
  • prepare/execute (для безопасных запросов с дополнительными параметрами). 

Правильное использование всех этих методов — гарантия работы с базой данных в PHP.