Thời gian đọc: 5 phút
Khi làm việc với cơ sở dữ liệu trong PHP, bạn có hai lựa chọn chính: PDO (PHP Data Objects) và MySQLi. Cả hai đều hỗ trợ kết nối và thực hiện các truy vấn với MySQL, nhưng PDO là sự lựa chọn linh hoạt hơn, đặc biệt khi bạn không muốn bị ràng buộc vào MySQL. Dưới đây là so sánh giữa hai phương pháp và lý do tại sao PDO có thể là sự lựa chọn tốt hơn.
Ưu điểm:
prepared statements
), giúp bảo vệ ứng dụng của bạn khỏi các cuộc tấn công SQL Injection.Cấu hình và Ví dụ:
<?php
// Cấu hình kết nối
$dsn = 'mysql:host=localhost;dbname=mydatabase';
$username = 'root';
$password = '';
// Tạo kết nối
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Kết nối thành công!";
} catch (PDOException $e) {
echo "Kết nối thất bại: " . $e->getMessage();
}
// Ví dụ truy vấn với chuẩn bị câu lệnh
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => '[email protected]']);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($user);
Ưu điểm:
Nhược điểm:
Cấu hình và Ví dụ:
<?php
// Cấu hình kết nối
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'mydatabase';
// Tạo kết nối
$mysqli = new mysqli($host, $username, $password, $database);
// Kiểm tra kết nối
if ($mysqli->connect_error) {
die("Kết nối thất bại: " . $mysqli->connect_error);
}
echo "Kết nối thành công!";
// Ví dụ truy vấn với chuẩn bị câu lệnh
$stmt = $mysqli->prepare('SELECT * FROM users WHERE email = ?');
$stmt->bind_param('s', $email);
$email = '[email protected]';
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
print_r($user);
// Đóng kết nối
$stmt->close();
$mysqli->close();
Nếu bạn không muốn bị ràng buộc vào MySQL và có kế hoạch sử dụng các hệ quản trị cơ sở dữ liệu khác hoặc muốn có một API thống nhất, PDO là sự lựa chọn tốt hơn. PDO cung cấp tính linh hoạt, bảo mật và khả năng chuyển giao cơ sở dữ liệu mà không cần thay đổi nhiều mã nguồn.
Nếu ứng dụng của bạn chỉ sử dụng MySQL và bạn muốn một API tối ưu hóa cho MySQL, MySQLi cũng là một lựa chọn tốt. Tuy nhiên, PDO vẫn là sự lựa chọn phổ biến hơn vì sự linh hoạt và tính bảo mật của nó.
MySQLi:
PDO (PHP Data Objects):