Подключение к MySQL через PDO в PHP

Введение

При работе с базами данных в 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, так как это современный и надежный способ взаимодействия с базой данных.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сайт создал Романенко Артем