Статья
📘 Глава 14. Подключение к MySQL с помощью PDO
Оглавление
Переходим к более современному и гибкому способу работы с базами данных — PDO (PHP Data Objects).
❓ Почему PDO?
-
Поддерживает разные базы данных (MySQL, SQLite, PostgreSQL и др.)
-
Умеет подготавливать запросы (
prepare
), защищая от SQL-инъекций -
Более объектно-ориентированный стиль
🧱 1. Подключение к MySQL
$dsn = "mysql:host=localhost;dbname=guestbook;charset=utf8mb4";
$user = "root";
$password = "password";
try {
$pdo = new PDO($dsn, $user, $password);
// Включим режим исключений
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Database connection failed: " . $e->getMessage());
}
💾 2. Добавление сообщения
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$author = trim($_POST["author"]);
$text = trim($_POST["text"]);
if ($author && $text) {
$stmt = $pdo->prepare("INSERT INTO messages (author, text) VALUES (?, ?)");
$stmt->execute([$author, $text]);
header("Location: " . $_SERVER["PHP_SELF"]);
exit;
} else {
echo "Please fill in both fields.";
}
}
📥 3. Получение сообщений
$stmt = $pdo->query("SELECT * FROM messages ORDER BY created_at DESC");
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($messages as $message) {
echo "<p><strong>" . htmlspecialchars($message["author"]) . ":</strong> "
. htmlspecialchars($message["text"]) . "</p>";
}
🧪 4. Полный пример — index.php
<?php
$dsn = "mysql:host=localhost;dbname=guestbook;charset=utf8mb4";
$user = "root";
$password = "password";
try {
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("DB Error: " . $e->getMessage());
}
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$author = trim($_POST["author"]);
$text = trim($_POST["text"]);
if ($author && $text) {
$stmt = $pdo->prepare("INSERT INTO messages (author, text) VALUES (?, ?)");
$stmt->execute([$author, $text]);
header("Location: " . $_SERVER["PHP_SELF"]);
exit;
} else {
echo "Please fill in both fields.";
}
}
?>
<form method="post">
<input type="text" name="author" placeholder="Your name">
<br>
<textarea name="text" placeholder="Your message"></textarea>
<br>
<button type="submit">Send</button>
</form>
<hr>
<?php
$stmt = $pdo->query("SELECT * FROM messages ORDER BY created_at DESC");
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($messages as $message) {
echo "<p><strong>" . htmlspecialchars($message["author"]) . ":</strong> "
. htmlspecialchars($message["text"]) . "</p>";
}
?>
✅ Что ты изучил:
-
Подключение к базе через PDO
-
Использование
prepare()
иexecute()
-
Обработка исключений (
try/catch
) -
Извлечение всех данных через
fetchAll()
В следующей главе мы сделаем обёртку-класс для PDO, чтобы вынести работу с базой в отдельный файл и писать код ещё чище.
32