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

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: Зачем PHP-разработчику уметь работать с разными БД

Современная веб-разработка редко обходится без взаимодействия с базами данных. PHP, как один из самых популярных серверных языков, предлагает гибкие инструменты для работы как с реляционными (SQL), так и с документо-ориентированными (NoSQL) системами. В этой статье мы подробно разберем подключение и выполнение основных операций с двумя популярными БД: PostgreSQL и MongoDB. Вы узнаете, как настроить соединение, выполнять запросы и обрабатывать результаты, используя современные практики PHP.

1. Работа с PostgreSQL в PHP через PDO

PostgreSQL — мощная объектно-реляционная СУБД. Для работы с ней в PHP рекомендуется использовать расширение PDO (PHP Data Objects), которое обеспечивает единый интерфейс для разных баз данных и повышает безопасность за счет подготовленных запросов.

1.1 Подключение к базе данных

Для начала убедитесь, что расширение pdo_pgsql включено в вашем php.ini. Пример подключения:

<?php
$host = 'localhost';
$dbname = 'my_database';
$user = 'my_user';
$password = 'my_password';

try {
    $dsn = "pgsql:host=$host;dbname=$dbname";
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Соединение установлено успешно";
} catch (PDOException $e) {
    die("Ошибка подключения: " . $e->getMessage());
}
?>

1.2 Выполнение запросов (CRUD)

Рассмотрим основные операции на примере таблицы users.

Создание записи (INSERT):

<?php
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);
$stmt->execute([':name' => 'Иван Иванов', ':email' => 'ivan@example.com']);
echo "Пользователь добавлен, ID: " . $pdo->lastInsertId();
?>

Чтение данных (SELECT):

<?php
$stmt = $pdo->query("SELECT id, name, email FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "ID: {$row['id']}, Имя: {$row['name']}, Email: {$row['email']}<br>";
}
?>

Обновление (UPDATE) и удаление (DELETE):

<?php
// Обновление
$sql = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':email' => 'newemail@example.com', ':id' => 1]);

// Удаление
$sql = "DELETE FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':id' => 1]);
?>

2. Работа с MongoDB в PHP

MongoDB — ведущая NoSQL база данных, хранящая данные в виде JSON-подобных документов. Для работы с ней в PHP используется официальное расширение mongodb и библиотека MongoDB PHP Library (устанавливается через Composer).

2.1 Установка и подключение

Установите библиотеку через Composer:

composer require mongodb/mongodb

Пример подключения к локальному серверу MongoDB:

<?php
require 'vendor/autoload.php';

$client = new MongoDB\Client("mongodb://localhost:27017");
$database = $client->selectDatabase('my_database');
$collection = $database->selectCollection('users');
echo "Подключение к MongoDB установлено";
?>

2.2 CRUD-операции с документами

Вставка документа (INSERT):

<?php
$insertResult = $collection->insertOne([
    'name' => 'Мария Петрова',
    'email' => 'maria@example.com',
    'age' => 28
]);
echo "Документ добавлен с ID: " . $insertResult->getInsertedId();
?>

Поиск документов (SELECT):

<?php
$cursor = $collection->find(['age' => ['$gte' => 25]]);
foreach ($cursor as $document) {
    echo "Имя: {$document['name']}, Email: {$document['email']}<br>";
}
?>

Обновление (UPDATE) и удаление (DELETE):

<?php
// Обновление одного документа
$updateResult = $collection->updateOne(
    ['name' => 'Мария Петрова'],
    ['$set' => ['age' => 29]]
);

// Удаление одного документа
$deleteResult = $collection->deleteOne(['name' => 'Мария Петрова']);
?>

3. Сравнение PostgreSQL и MongoDB: когда что выбирать?

Выбор между реляционной и документной БД зависит от задачи:

  • PostgreSQL — идеален для приложений с четкой структурой данных, где важны транзакции, сложные JOIN-запросы и ссылочная целостность (например, банковские системы, CRM).
  • MongoDB — подходит для проектов с гибкой схемой данных, быстрой разработкой и большими объемами неструктурированной информации (например, логи, каталоги товаров, социальные сети).

Обе технологии отлично работают с PHP, и часто используются вместе в одном проекте (полиглотная персистентность).

4. Советы по безопасности и производительности

При работе с базами данных в PHP всегда следуйте этим правилам:

  • Используйте подготовленные запросы — это защита от SQL-инъекций (как в примерах с PDO выше).
  • Не храните пароли в открытом виде — используйте password_hash() и password_verify().
  • Для MongoDB — валидируйте и фильтруйте входные данные перед вставкой

Блоги

Рекомендаций по книгам