Введение в работу с базами данных в 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' =>