Vì vậy, nếu bạn phải chuyển dự án của mình sang sử dụng cơ sở dữ liệu khác, PDO sẽ giúp quá trình này trở nên dễ dàng. Bạn chỉ phải thay đổi chuỗi 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ộ mã - bao gồm cả truy vấn
Cả hai đều hướng đối tượng, nhưng MySQLi cũng cung cấp API thủ tục
Cả hai đều hỗ trợ Báo cáo đã chuẩn bị. Các câu lệnh đã chuẩn bị bảo vệ khỏi SQL injection và rất quan trọng đối với bảo mật ứng dụng web
Các ví dụ về MySQL trong cả Cú pháp MySQLi và PDO
Trong phần này và trong các chương tiếp theo, chúng tôi trình bày 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. Tiện ích mở rộng MySQLi được cài đặt tự động trong hầu hết các trường hợp, khi gói mysql php5 được cài đặt
Để biết chi tiết cài đặt, hãy truy cập. http. //php. mạng/thủ công/en/mysqli. cài đặt. php
Cài đặt PDO
Để biết chi tiết cài đặt, hãy truy cập. http. //php. net/manual/en/pdo. cài đặt. php
Mở kết nối tới MySQL
Trước khi chúng tôi có thể truy cập dữ liệu trong cơ sở dữ liệu MySQL, chúng tôi cần có thể kết nối với máy chủ
Ví dụ [Hướng đối tượng MySQLi]
$servername = "localhost";
$username = "tên người dùng";
$password = "mật khẩu";
// Tạo kết nối
$conn = new mysqli[$servername, $username, $password];
// Kiểm tra kết nối
if [$conn->connect_error] {
die["Kết nối không thành công. ". $conn->connect_error];
}
echo "Đã kết nối thành công";
?>
Lưu ý về ví dụ hướng đối tượng ở trên
$connect_error đã bị hỏng cho đến khi PHP 5. 2. 9 và 5. 3. 0. 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 đoạn mã sau để thay thế
// Kiểm tra kết nối
if [mysqli_connect_error[]] {
die["Kết nối cơ sở dữ liệu không thành công. ". mysqli_connect_error[]];
}
Ví dụ [Thủ tục MySQLi]
$servername = "localhost";
$username = "tên người dùng";
$password = "mật khẩu";
// Tạo kết nối
$conn = mysqli_connect[$servername, $username, $password];
// Kiểm tra kết nối
if [. $conn] {
die["Kết nối không thành công. ". mysqli_connect_error[]];
}
echo "Đã kết nối thành công";
?>
Ví dụ [PDO]
$servername = "localhost";
$username = "tên người dùng";
$password = "mật khẩu";
thử {
$conn = new PDO["mysql. host=$servername;dbname=myDB", $username, $password];
// đặt chế độ lỗi PDO thành ngoại lệ
$conn->setAttribute[ . ATTR_ERRMODE, PDO. ERRMODE_EXCEPTION];
echo "Đã kết nối thành công";
} catch[PDOException $e] {
echo "Không kết nối được. ". $e->getMessage[];
}
?>
Ghi chú. Trong ví dụ PDO ở trên, chúng tôi cũng đã chỉ định một cơ sở dữ liệu [myDB]. PDO yêu cầu cơ sở dữ liệu hợp lệ để kết nối với. Nếu không có cơ sở dữ liệu nào được chỉ định, một ngoại lệ sẽ được đưa ra
Mẹo. 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ỳ sự cố nào có thể xảy ra trong các truy vấn cơ sở dữ liệu của chúng tôi. Nếu một ngoại lệ được đưa ra trong khối try{ }, tập lệnh sẽ ngừng thực thi 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 tập lệnh kết thúc. Để đóng kết nối trước, hãy sử dụng như sau
Kết nối với cơ sở dữ liệu và tương tác với dữ liệu của nó là một trong những tính năng chính của trang web động PHP. Nhà phát triển muốn tạo một hệ thống quản lý thông tin với MySQL có ba lựa chọn chính về việc sử dụng phần mở rộng PHP nào
Các hàm MySQL, MySQLi, PDO. chọn thư viện nào?
chức năng MySQL
Khả năng đầu tiên, có sẵn kể từ phiên bản PHP 2. 0 là phần mở rộng MySQL gốc. Nó cung cấp nhiều chức năng, nhưng không được dùng nữa kể từ PHP 5. 5 và không còn được cung cấp kể từ phiên bản 7. Nó cho phép một cách tiếp cận lập trình thủ tục độc quyền, do đó nó không có giao diện lập trình hướng đối tượng riêng. Hiện tại, cộng đồng PHP không đề xuất công nghệ này cho các dự án mới. Những lý do chính là thiếu hỗ trợ OOP và thực tế là nó không cho phép truy cập vào một số kỹ thuật đặc biệt hữu ích. Ví dụ: nó không cho phép sử dụng các câu lệnh đã chuẩn bị và các thủ tục được lưu trữ
MySQLi
Khả năng thứ hai, có sẵn từ PHP 5. 0, là phần mở rộng MySQLi [MySQL được cải thiện]. Nó hỗ trợ cách tiếp cận Hướng đối tượng, ngay cả khi nó vẫn cho phép cách tiếp cận theo thủ tục. Nó bao gồm cả API [Giao diện lập trình ứng dụng] cho các câu lệnh đã chuẩn bị và các thủ tục được lưu trữ cũng như cho nhiều truy vấn và giao dịch
PDO
Khả năng thứ ba là phần mở rộng Đối tượng dữ liệu PHP [PDO]. Cái này hoàn toàn hướng đối tượng. Vì vậy, nó không hỗ trợ cách tiếp cận theo thủ tục. Sự khác biệt chính với MySQLi là sự hiện diện của trình điều khiển cho các DBMS khác nhau, không dành riêng cho MySQL. Điều này có nghĩa là ngay cả khi ứng dụng của chúng tôi được sinh ra để giao tiếp với MySQL, chúng tôi có thể dễ dàng điều chỉnh nó với các cơ sở dữ liệu khác với rất ít biến thể trong mã. Cụ thể, trình điều khiển có sẵn cho DBMS sau. Cubrid, Microsoft SQL Server, Firebird, IBM DB2, Informix Dynamic Server, MySQL, Oracle, ODBC và DB2, PostgreSQL, SQLite, 4D. Về cơ bản, PDO cung cấp một mức độ trừu tượng để tương tác với cơ sở dữ liệu
So sánh giữa MySQLi và PDO
Sự lựa chọn giữa MySQLi và PDO có thể bao gồm một số yếu tố và thường chỉ do sở thích cú pháp
Tuy nhiên, trong một số trường hợp, sự lựa chọn rất dễ thực hiện. Ví dụ: nếu ứng dụng của chúng tôi phải tương thích với các DBMS khác nhau, PDO sẽ trở thành lựa chọn bắt buộc. Đây cũng là lý do chính tại sao khung phát triển PHP phổ biến nhất lại chọn PDO [i. e Zend, Symfony, Laravel và Yii]. Một ưu điểm khác của PDO là nó cung cấp khả năng gán tên cho các tham số được sử dụng trong các câu lệnh đã chuẩn bị. Vì vậy, điều này tránh nhu cầu sử dụng hình thức MySQLi phức tạp hơn, yêu cầu trình giữ chỗ
Việc so sánh giữa hai giải pháp đã gây ra nhiều cuộc thảo luận giữa các lập trình viên. Mặc dù, hiện tại, PDO là tiêu chuẩn tham khảo. Nó có một số nhược điểm, chẳng hạn như hiệu suất kém hơn một chút so với MySQLi. Ngoài ra, nó không cung cấp quyền truy cập trực tiếp vào một số tính năng của các phiên bản MySQL mới nhất, chẳng hạn như nhiều câu lệnh
Vì vậy, chúng tôi sẽ hiển thị cả hai thư viện, bắt đầu từ MySQLi. Và chúng ta sẽ cùng họ nhận ra những tác vụ phổ biến nhất của một ứng dụng Web. Ví dụ: kết nối cơ sở dữ liệu, thao tác đọc và ghi và quản lý dữ liệu thông qua các biểu mẫu
Để làm theo hướng dẫn này, bạn sẽ cần có kiến thức cơ bản về PHP, MySQL và lập trình hướng đối tượng