Работа с базами данных в PHP: PostgreSQL и MongoDB для начинающих

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

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

Начать курс

Введение: почему PHP и базы данных — это сила

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

Для новичка выбор между ними может показаться сложным, но на самом деле каждая решает свои задачи. PostgreSQL — это надёжный SQL-стандарт для структурированных данных, а MongoDB — гибкая NoSQL-система для быстрого прототипирования и работы с JSON-подобными документами. Мы покажем, как подключиться к обеим из PHP, выполнить базовые операции (CRUD) и дадим практические советы.

1. Подготовка окружения: что нужно установить

Прежде чем писать код, убедитесь, что у вас установлены необходимые расширения PHP. Для работы с PostgreSQL требуется расширение pdo_pgsql, для MongoDB — mongodb (через PECL или composer).

Установка расширений

  • PostgreSQL: раскомментируйте строку extension=pdo_pgsql в php.ini или установите через менеджер пакетов (например, sudo apt install php-pgsql).
  • MongoDB: используйте Composer: composer require mongodb/mongodb — это установит официальную библиотеку.

После установки проверьте, что расширения активны, выполнив php -m | grep -i pgsql и php -m | grep -i mongodb.

2. PostgreSQL и PHP: надёжность и SQL

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

Подключение к PostgreSQL

Создайте файл connect_pgsql.php:

<?php
$host = 'localhost';
$dbname = 'testdb';
$user = 'postgres';
$pass = 'password';

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

CRUD-операции на примере таблицы users

Создадим таблицу и выполним базовые запросы.

Создание таблицы

<?php
$sql = "CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(150) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
$pdo->exec($sql);
echo "Таблица создана.";
?>

Вставка данных (CREATE)

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

Чтение данных (READ)

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

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

<?php
// Обновление
$stmt = $pdo->prepare("UPDATE users SET name = :name WHERE id = :id");
$stmt->execute(['name' => 'Пётр Сидоров', 'id' => 1]);

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

Совет: Всегда используйте подготовленные запросы (prepare) для защиты от SQL-инъекций.

3. MongoDB и PHP: гибкость без схемы

MongoDB хранит данные в виде документов BSON (бинарный JSON). Это идеально для проектов, где структура данных может меняться. Для PHP используем официальную библиотеку mongodb/mongodb.

Подключение к MongoDB

<?php
require 'vendor/autoload.php'; // если через Composer

use MongoDB\Client;

$client = new Client("mongodb://localhost:27017");
$collection = $client->testdb->users; // база testdb, коллекция users
echo "Подключение к MongoDB успешно!";
?>

CRUD-операции в MongoDB

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

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

Чтение документов (READ)

<?php
$cursor = $collection->find(['age' => ['$gt' => 25]]); // возраст больше 25
foreach ($cursor as $doc) {
    echo "Имя: {$doc['name']}, Email: {$doc['email']}<br>";
}
?>

Обновление (UPDATE)

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

Удаление (DELETE)

<?php
$deleteResult = $collection->deleteOne(['name' => 'Мария Иванова']);
echo "Удалено документов: " . $deleteResult->getDeletedCount();
?>

Важно: В MongoDB нет жёсткой схемы — вы можете добавлять новые поля в любой документ без изменения структуры коллекции.

4. Когда выбирать PostgreSQL, а когда MongoDB?

Выбор между ре

Блоги

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