Bài 02: Kết nối PHP với MySQL - PHP và MySQL
Kể từ phiên bản PHP5 trở đi chúng ta có thể kết nối với MySQL bằng cách sử dụng hai thư viện chính đó là: MySQLi (i là chữ viết tắt của improved) PDO (PHP Data Objects) Đối với những phiên bản cũ thì có một bộ thư viện tên là MySQL, tuy nhiên bộ thư viện này sẽ bị gỡ bỏ khỏi PHP kể từ ...
Kể từ phiên bản PHP5 trở đi chúng ta có thể kết nối với MySQL bằng cách sử dụng hai thư viện chính đó là:
- MySQLi (i là chữ viết tắt của improved)
- PDO (PHP Data Objects)
Đối với những phiên bản cũ thì có một bộ thư viện tên là MySQL, tuy nhiên bộ thư viện này sẽ bị gỡ bỏ khỏi PHP kể từ Version 5.3, vì vậy bạn không nên sử dụng nó.
Câu hỏi đặt ra bây giờ là giữa hai bộ thư viện MySQLi và PDO thì nên sử dụng cái nào?
1. Nên sử dụng MySQLi hay PDO
Có lẽ câu trả lời hay nhất đó là bạn thích sử dụng cái nào thì tùy vào sở thích của bạn, mỗi cái đều có những ưu điểm riêng của nó. Tuy nhiên người ta vẫn đưa ra một số đánh giá để bạn quyết định chọn lựa.
Thứ nhất: Với MySQLi thì chỉ có thể kết nối và xử lý với MySQL, còn PDO có thể kết nối với 12 hệ quản trị CSDL khác nhau. Như vậy nếu ứng dụng của bạn có kết nối với nhiều hệ quản trị CSDL thì bạn nên sử dụng PDO, còn chỉ một mình MySQL thôi thì có thể chọn MySQLi.
Thứ hai: Giả sử nếu dự án của bạn đang viết ở MySQL, nhưng một ngày nào đó bạn chuyển toàn bộ data sang SQL Server thì lúc này PDO lại có lợi thế hơn bởi vì bạn chỉ cần thay chuỗi kết nối là được. Nhưng với MySQLi thì ban sẽ phải viết lại toàn bộ dự án.
Thứ ba: Cả hai thư viện đều hỗ trợ Prepared Statements, đây là vấn đề quan trọng để tránh lỗi SQL Injection.
Thứ tư:Cả hai thư viện đều hỗ trợ object-oriented (hướng đối tượng), nhưng đối với MySQLi thì hỗ trợ thêm các hàm thủ tục (Procedural).
Dựa vào bốn nhận xét trên rõ ràng ưu thế sẽ thuộc về PDO phải không các bạn :D.
2. Kết nối PHP với MySQL
Vì PDO và MySQLi là các thư viện riêng nên muốn sử dụng bạn phải cài đặt nó vào bộ thư viện của PHP. Nhưng bạn đừng lo ngại vì hầu hết các Hosting, VPS hay Server đều đã cài đặt săn cho bạn, bạn chỉ việc sử dụng mà thôi.
Như ở bài mối liên hệ giữa PHP và MySQL mình có nói muốn thực thi câu truy vấn MySQL bằng PHP thì bạn phải thực hiện kết nối trước, sau đó bạn muốn làm gì thì làm. Cách kết nối như thế nào thì phụ thuộc vào thư viện bạn chọn, tuy nhiên trong bài mình sẽ trình bày ba cách đó là kết nối bằng PDO, MySQLi (object-oriented) và MySQLi (Procedural).
Trong các ví dụ dưới đây mình sử dụng thông tin kết nối như sau:
- host: localhost
- username: root
- password: vertrigo
Trong đó:
- host: là địa chỉ cài đặt MySQL, thông thường là localhost
- username: là tên đăng nhập vào MySQL
- password: mật khẩu đăng nhập
Kết nối MySQL bằng MySQLi Object-Oriented:
// Tạo đối tượng mysqli $conn = new mysqli('localhost', 'root', 'vertrigo'); // Kiểm tra kết nối thành công hay thất bại // nếu thất bại thì thông báo lỗi if ($conn->connect_error) { die("Kết nối thất bại: " . $conn->connect_error); } // Thông báo kết nối thành công echo "Kết nối thành công";
Lưu ý: Các phiên bản MySQL trước Version 5.3 sẽ phải sử dụng đoạn code sau để kiểm tra kết nối thành công hay thất bại.
if (mysqli_connect_error()) { die("Kết nối thất bại: " . mysqli_connect_error()); }
Kết nối MySQL bằng MySQLi Procedural:
// Thực hiện kết nối $conn = mysqli_connect('localhost', 'root', 'vertrigo'); // Kiểm tra kết nối thành công hay thất bại // nếu thất bại thì thông báo lỗi if (!$conn) { die("Kết nối thất bại: " . mysqli_connect_error()); } // Thông báo kết nối thành công echo "Kết nối thành công";
Kết nối MySQL bằng PDO:
// Nhánh kết nối thành công try { // Kết nối $conn = new PDO("mysql:host=localhost;dbname=DBName", 'root', 'vertrigo'); // Thiết lập chế độ lỗi $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Thông báo thành công echo "Kết nối thành công"; } // Nhánh kết nối thất bại catch (PDOException $e) { echo "Kết nối thất bại: " . $e->getMessage(); }
Bạn để ý trong chuỗi kết nối mình có chọn database cho nó là dbname=DBName
, đối với PDO ban phải chọn database để kết nối nữa nếu không sẽ bị lỗi.
3. Ngắt kết nối PHP với MySQL
Mỗi thư viện sẽ có một cách ngắt kết nối khác nhau.
Đối với MySQLi Object-Oriented:
$conn->close();
Đối với MySQLi Procedural:
mysqli_close($conn);
Đối với PDO:
$conn = null;
4. Lời kết
Như vậy là mình đã giới thiệu xong hai thư viện sử dụng để kết nối PHP với MySQL nhiều nhất đó là PDO và MySQLi, cả hai thư viện đều có những ưu điểm và nhược điểm nên việc chọn lựa thư viện nào để sử dụng thì phụ thuộc vào sở thích của bạn và bốn yếu tố mà mình đã trình bày ở trên.
Bài này mình dừng ở đây, bài tiếp theo chúng ta sẽ học cách tạo MySQL Table bằng lệnh PHP.