Введение: почему 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?
Выбор между ре