Hầu hết ứng dụng web đều cần lưu trữ và truy xuất dữ liệu. PHP làm việc rất tốt với MySQL, và cách được khuyến nghị hiện nay là sử dụng PDO (PHP Data Objects) — một lớp trừu tượng giúp bạn làm việc với nhiều loại database khác nhau bằng cùng một interface.
Tại sao dùng PDO thay vì mysqli?
- Hỗ trợ nhiều database: MySQL, PostgreSQL, SQLite, Oracle chỉ cần thay driver
- Prepared Statements: Ngăn chặn SQL Injection hiệu quả
- Exception handling: Xử lý lỗi nhất quán với try/catch
Kết nối database
<?php
try {
$pdo = new PDO(
"mysql:host=localhost;dbname=my_database;charset=utf8mb4",
"root",
"",
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
} catch (PDOException $e) {
die("Lỗi kết nối: " . $e->getMessage());
}
Prepared Statements — Bắt buộc phải dùng
Khi truy vấn có dữ liệu từ người dùng, luôn luôn dùng prepared statements để tránh SQL Injection:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch();
$stmt = $pdo->prepare("SELECT * FROM posts WHERE slug = :slug");
$stmt->execute(['slug' => $slug]);
$post = $stmt->fetch();
INSERT, UPDATE, DELETE
// INSERT
$stmt = $pdo->prepare("INSERT INTO posts (title, content) VALUES (:title, :content)");
$stmt->execute(['title' => $title, 'content' => $content]);
$newId = $pdo->lastInsertId();
// UPDATE
$stmt = $pdo->prepare("UPDATE posts SET views = views + 1 WHERE id = ?");
$stmt->execute([$post_id]);
// DELETE
$stmt = $pdo->prepare("DELETE FROM posts WHERE id = ?");
$stmt->execute([$post_id]);
Transaction
try {
$pdo->beginTransaction();
$pdo->prepare("UPDATE accounts SET balance = balance - ? WHERE id = ?")
->execute([$amount, $sender_id]);
$pdo->prepare("UPDATE accounts SET balance = balance + ? WHERE id = ?")
->execute([$amount, $receiver_id]);
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
}
Không bao giờ nối chuỗi trực tiếp vào câu SQL. Luôn dùng prepared statements — đây là thói quen, không phải tùy chọn.
Kết luận
PDO cung cấp một interface sạch, an toàn để làm việc với database trong PHP. Hãy thiết lập kết nối PDO một lần trong file config, và luôn dùng prepared statements cho mọi truy vấn có tham số.
Chưa có bình luận. Hãy là người đầu tiên!