
Введение
При работе с базами данных в PHP рекомендуется использовать PDO (PHP Data Objects). Это удобный и безопасный интерфейс для работы с различными СУБД, включая MySQL. В отличие от устаревшего mysql_*
, PDO поддерживает подготовленные запросы, обработку ошибок и безопасность данных.
В этой статье мы подробно рассмотрим подключение к MySQL через PDO, разберем основные методы работы с базой данных и приведем примеры кода.
Установка и настройка
Прежде чем использовать PDO, убедитесь, что у вас установлены необходимые расширения. В большинстве случаев PDO уже включен в PHP, но можно проверить его наличие с помощью:
print_r(PDO::getAvailableDrivers());
Если mysql
есть в списке, значит, вы можете работать с MySQL через PDO. В противном случае установите соответствующее расширение.
Подключение к MySQL через PDO
Основной синтаксис
Для подключения используется объект PDO
, который принимает три параметра:
- DSN (Data Source Name) – строка подключения, содержащая хост, имя базы данных и кодировку.
- Имя пользователя БД.
- Пароль.
Пример подключения:
<?php
$host = 'localhost';
$dbname = 'test_db';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Подключение успешно!";
} catch (PDOException $e) {
echo "Ошибка подключения: " . $e->getMessage();
}
?>
Разбор кода:
new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password)
– создаёт объект PDO.setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
– включает режим выброса исключений при ошибках.catch (PDOException $e)
– перехватывает ошибки и выводит их.
Выполнение запросов
Выполнение простого запроса (exec)
Метод exec()
используется для выполнения SQL-запросов, которые не возвращают данные (например, INSERT
, UPDATE
, DELETE
).
$sql = "CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100))";
$pdo->exec($sql);
echo "Таблица создана!";
Подготовленные запросы (prepare + execute)
Подготовленные запросы помогают защититься от SQL-инъекций.
Вставка данных
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);
$stmt->execute(['name' => 'Иван', 'email' => 'ivan@example.com']);
Выборка данных
$sql = "SELECT * FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email' => 'ivan@example.com']);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($user);
Обновление данных
$sql = "UPDATE users SET name = :name WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(['name' => 'Иван Петров', 'email' => 'ivan@example.com']);
Удаление данных
$sql = "DELETE FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email' => 'ivan@example.com']);
Выборка данных
fetch()
Получает одну строку результата.
$sql = "SELECT * FROM users LIMIT 1";
$stmt = $pdo->query($sql);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($user);
fetchAll()
Получает все строки результата.
$sql = "SELECT * FROM users";
$stmt = $pdo->query($sql);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($users);
fetchColumn()
Получает одно значение (например, количество записей в таблице).
$sql = "SELECT COUNT(*) FROM users";
$count = $pdo->query($sql)->fetchColumn();
echo "Количество пользователей: $count";
Транзакции
Транзакции позволяют выполнить несколько запросов одновременно и откатить изменения в случае ошибки.
try {
$pdo->beginTransaction();
$pdo->exec("INSERT INTO users (name, email) VALUES ('Алексей', 'alex@example.com')");
$pdo->exec("UPDATE users SET name = 'Алексей Смирнов' WHERE email = 'alex@example.com'");
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "Ошибка: " . $e->getMessage();
}
Обработка ошибок
PDO поддерживает несколько режимов обработки ошибок:
PDO::ERRMODE_SILENT
– ошибки не выводятся (по умолчанию).PDO::ERRMODE_WARNING
– выводятся предупреждения.PDO::ERRMODE_EXCEPTION
– выбрасываются исключения (рекомендуемый вариант).
Настройка:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Заключение
Использование PDO в PHP делает работу с MySQL более безопасной и удобной. Основные преимущества:
- Поддержка подготовленных запросов.
- Работа с разными СУБД без изменения кода.
- Гибкость в обработке данных.
- Улучшенная безопасность.
При разработке рекомендуется всегда использовать PDO, так как это современный и надежный способ взаимодействия с базой данных.