06. Подключение к MySQL через PDO

Что такое база данных

База данных — это место, где хранятся все данные сайта: пользователи, товары, сообщения, статьи. PHP может подключаться к базе, выполнять запросы и получать ответы.
MySQL — это как шкаф с ящиками, где в каждом ящике (таблице) лежат аккуратно разложенные записи.

Что такое PDO

PDO (PHP Data Objects) — это универсальный способ подключения к базе данных. Он безопаснее и современнее, чем старые функции вроде mysql_connect().

Преимущества PDO:

  • Поддерживает разные СУБД (MySQL, PostgreSQL, SQLite и др.).
  • Удобный синтаксис.
  • Безопасные запросы с prepare().

Создание базы данных

1. Открой phpMyAdmin (обычно по адресу http://localhost/phpmyadmin). 2. Создай новую базу с именем my_app. 3. Перейди на вкладку SQL и выполни команду:

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  email VARCHAR(100)
);
Теперь у тебя есть таблица users с полями id, name и email.

Подключение к базе данных

Теперь создадим файл connect.php с подключением через PDO:

<?php
try {
  $pdo = new PDO('mysql:host=localhost;dbname=my_app;charset=utf8', 'root', '');
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo ' Подключение успешно!';
} catch (PDOException $e) {
  echo 'Ошибка подключения: ' . $e->getMessage();
}
?>

Что здесь происходит

  • Используется класс PDO для подключения к MySQL.
  • Задаётся DSN (строка подключения): mysql:host=localhost;dbname=my_app.
  • При ошибке подключения выбрасывается исключение, которое ловится блоком try...catch.

Проверка подключения

Если ты видишь сообщение «Подключение успешно!», значит PHP успешно соединился с MySQL. Если нет — проверь логин, пароль и название базы.

Выборка данных (SELECT)

Допустим, в таблице users уже есть записи. Чтобы получить их, используем метод query().

<?php
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  echo $row['name'] . ' — ' . $row['email'] . '<br>';
}
?>

Результат


Анна — anna@mail.com
Иван — ivan@mail.com

Добавление данных (INSERT)

Для добавления записей можно использовать метод exec() или подготовленные выражения prepare().

<?php
$sql = "INSERT INTO users (name, email) VALUES ('Анна', 'anna@mail.com')";
$pdo->exec($sql);
echo 'Запись добавлена';
?>

Но безопаснее — prepare + execute


<?php
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (?, ?)');
$stmt->execute(['Иван', 'ivan@mail.com']);
?>

Почему это важно: такой способ защищает от SQL-инъекций — одной из самых опасных уязвимостей.

Обновление данных (UPDATE)


<?php
$stmt = $pdo->prepare('UPDATE users SET email = ? WHERE id = ?');
$stmt->execute(['new@mail.com', 1]);
?>

Удаление данных (DELETE)


<?php
$stmt = $pdo->prepare('DELETE FROM users WHERE id = ?');
$stmt->execute([2]);
?>

Пример: простая таблица пользователей


<?php
$stmt = $pdo->query('SELECT * FROM users');
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<table border='1' cellpadding='5'> <tr><th>ID</th><th>Имя</th><th>Email</th></tr> <?php foreach ($users as $user): ?> <tr> <td><?= $user['id'] ?></td> <td><?= htmlspecialchars($user['name']) ?></td> <td><?= htmlspecialchars($user['email']) ?></td> </tr> <?php endforeach; ?> </table>

Проверка ошибок PDO

Если запрос выполнен неправильно, можно получить ошибку:

$stmt = $pdo->query('SELECT * FROM non_existing_table');
PHP выбросит исключение, потому что мы указали PDO::ERRMODE_EXCEPTION. Это удобно для отладки.

Обработка ошибок


try {
  $stmt = $pdo->query('SELECT * FROM test');
} catch (PDOException $e) {
  echo 'Ошибка: ' . $e->getMessage();
}

Типичные ошибки новичков

  • Забыли указать charset=utf8 — кириллица отображается криво.
  • Подключаются без try/catch — не видят ошибок подключения.
  • Используют старые функции mysql_ вместо PDO.
  • Не используют prepare — код уязвим для SQL-инъекций.

Практические задания

  • Создай таблицу products (id, title, price) и добавь 3 записи через PDO.
  • Выведи таблицу товаров в виде HTML-таблицы.
  • Добавь форму для добавления нового товара в базу.

Итоги урока

Теперь вы умеете:
  • Подключаться к MySQL через PDO.
  • Создавать таблицы и выполнять запросы SELECT, INSERT, UPDATE, DELETE.
  • Использовать подготовленные выражения для защиты данных.
  • Обрабатывать ошибки подключения и запросов.