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

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

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

Начать курс

Введение в работу с базами данных в PHP

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

Для начинающих разработчиков выбор между SQL и NoSQL может показаться сложным. Мы разберем ключевые отличия, научимся подключаться к обеим базам данных из PHP и выполнять базовые CRUD-операции (Create, Read, Update, Delete). К концу статьи вы сможете самостоятельно выбрать подходящую СУБД для вашего проекта и написать рабочий код для взаимодействия с ней.

1. PostgreSQL: работа с реляционными данными через PDO

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

Подключение к PostgreSQL через PDO

Первый шаг — установка драйвера pdo_pgsql. Убедитесь, что он активирован в вашем php.ini. После этого можно создать подключение:

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

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

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

Рассмотрим работу с таблицей users, содержащей поля id, name и email. Все запросы выполняются через подготовленные выражения (prepared statements) для защиты от SQL-инъекций.

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

<?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();
?>

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

<?php
$sql = "SELECT * FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':id' => 1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if ($user) {
    echo "Имя: " . $user['name'] . ", Email: " . $user['email'];
} else {
    echo "Пользователь не найден.";
}
?>

Обновление (Update) и удаление (Delete):

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

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

2. MongoDB: работа с документами через MongoDB PHP Library

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

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

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

composer require mongodb/mongodb

После этого создайте подключение к серверу MongoDB (по умолчанию работает на порту 27017):

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

$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->my_database->users; // База данных: my_database, коллекция: users

echo "Подключение к MongoDB успешно установлено!";
?>

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

В MongoDB данные хранятся в виде ассоциативных массивов (документов). Рассмотрим те же операции с пользователями.

Создание документа (Create):

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

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

<?php
// Поиск одного документа
$user = $collection->findOne(['name' => 'Мария Сидорова']);
if ($user) {
    echo "Email: " . $user['email'];
} else {
    echo "Пользователь не найден.";
}

// Поиск всех документов, удовлетворяющих условию
$cursor = $collection->find(['age' => ['$gt' => 25]]);
foreach ($cursor as $doc) {
    echo $doc['name'] . " - " . $doc['email'] . "<br>";
}
?>

Обновление (Update) и удаление (Delete):

<?php
// Обновление одного документа
$updateResult = $collection->updateOne(
    ['name' => 'Мария Сидорова'],
    ['$set' => ['email' => 'new_maria@example.com']]
);
echo "Обновлено документов: " . $updateResult->getModifiedCount();

// Удаление одного документа
$deleteResult = $collection->deleteOne(['name' =>                

Блоги

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