ducdev
Bài viết

PHP và MySQL — Kết nối database với PDO đúng cách

PDO là cách chuẩn và an toàn nhất để kết nối PHP với MySQL. Bài viết hướng dẫn kết nối, thực thi truy vấn, dùng prepared statements và xử lý lỗi đúng cách.

a
admin
18/04/2026 · 2 phút đọc · 0 lượt xem
Chia sẻ
PHP và MySQL — Kết nối database với PDO đúng cách

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ố.

#PHP #MySQL #PDO #database #SQL Injection
a
Tác giả
admin

Lập trình viên, yêu thích chia sẻ kiến thức về công nghệ và phát triển phần mềm.

Bình luận

Chưa có bình luận. Hãy là người đầu tiên!

Để lại bình luận

Bình luận sẽ được duyệt trước khi hiển thị.