Kết nối PHP với MySQL, với phiên bản PHP 5 và các cao hơn có thể làm việc với một cơ sở dữ liệu MySQL bằng cách sử dụng:
- Phần mở rộng MySQLi (chữ "i" là viết tắt của cải tiến - improved).
- PDO (đối tượng dữ liệu PHP).
Các phiên bản trước của PHP đã sử dụng phần mở rộng MySQL. Tuy nhiên, tiện ích mở rộng này đã không được dùng nữa vào năm 2012.
Nội dung chính
Có nên sử dụng MySQLi hoặc PDO không?
Cả MySQLi và PDO đều có ưu điểm:
PDO làm việc trên 12 hệ thống cơ sở dữ liệu khác nhau, trong khi MySQLi chỉ làm việc với cơ sở dữ liệu MySQL.
Vì vậy, nếu bạn phải chuyển đổi dự án để sử dụng một cơ sở dữ liệu khác, bạn nên sử dụng PDO. Bạn chỉ phải thay đổi thông tin kết nối và một vài truy vấn. Với MySQLi, bạn sẽ cần phải viết lại toàn bộ code - bao gồm các truy vấn.
Cả hai đều hướng đối tượng, nhưng MySQLi cũng cung cấp một API thủ tục.
Cả hai hỗ trợ PreparedStatements. Các câu lệnh PreparedStatements được bảo vệ khỏi việc SQL injection và rất quan trọng đối với bảo mật ứng dụng web.
Ví dụ về MySQL trong cả hai định dạng MySQLi và PDO
Bài này và các bài sau, chúng ta tìm hiểu về ba cách làm việc với PHP và MySQL:
- MySQLi (hướng đối tượng)
- MySQLi (thủ tục)
- PDO
Cài đặt MySQLi
Đối với Linux và Windows: Phần mở rộng MySQLi được cài đặt tự động, khi gói mysql php5 được cài đặt.
Để biết chi tiết cài đặt, hãy truy cập: http://php.net/manual/en/mysqli.installation.php
Cài đặt PDO
Để biết chi tiết cài đặt, hãy truy cập: http://php.net/manual/en/pdo.installation.php
PHP kết nối với MySQL
Trước khi chúng ta có thể truy cập dữ liệu trong cơ sở dữ liệu MySQL, chúng ta cần phải mở một kết nối với máy chủ:
Ví dụ (MySQLi hướng đối tượng)
<?php $servername = "localhost"; $username = "username"; $password = "password"; // tạo kết nối $conn = new mysqli($servername, $username, $password); // kiểm tra kết nối if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?>
PHP là một ngôn ngữ tuyệt vời và phổ biến!
Lưu ý về ví dụ hướng đối tượng ở trên: $connect_error bị lỗi đối vơi bản PHP 5.2.9 và 5.3.0 trở về trước. Nếu bạn cần đảm bảo khả năng tương thích với các phiên bản PHP trước 5.2.9 và 5.3.0, hãy sử dụng code sau thay vào đó:
// kiểm tra kết nối if (mysqli_connect_error()) { die("Database connection failed: " . mysqli_connect_error()); }
Ví dụ (MySQLi hướng thủ tục)
<?php $servername = "localhost"; $username = "username"; $password = "password"; // tạo kết nối $conn = mysqli_connect($servername, $username, $password); // kiểm tra kết nối if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; ?>
Ví dụ (PDO)
<?php $servername = "localhost"; $username = "username"; $password = "password"; try { $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password); // thiết lập lỗi PDO thành ngoại lệ $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connected successfully"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } ?>
Một lợi ích lớn của PDO là nó có một lớp ngoại lệ để xử lý bất kỳ vấn đề nào có thể xảy ra trong các truy vấn cơ sở dữ liệu của chúng ta. Nếu một ngoại lệ được ném vào trong khối try {}, script sẽ dừng thực hiện và chuyển trực tiếp đến khối catch () {} đầu tiên.
Đóng kết nối
Kết nối sẽ tự động đóng khi kịch bản kết thúc. Sau đây là các ví dụ đóng kết nối:
Ví dụ (MySQLi hướng đối tượng)
$conn->close();
Ví dụ (MySQLi hướng thủ tục)
mysqli_close($conn);
Ví dụ (PDO)
$conn = null;