Введение: Зачем 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 — валидируйте и фильтруйте входные данные перед вставкой