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.
- Использовать подготовленные выражения для защиты данных.
- Обрабатывать ошибки подключения и запросов.