Hướng đối tượng mysqli so với thủ tục mysqli so với pdo

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

Sự khác biệt giữa MySQLi và PDO là gì?

Như đã nêu trước đó, cả PDO và MySQLi đều cực kỳ giống nhau, nhưng có một số khác biệt nhỏ về cú pháp. MySQLi tuân theo quy ước solid_case truyền thống của PHP, trong khi PDO sử dụng camelCase . Ngoài ra, các phương thức của MySQLi được sử dụng làm thuộc tính đối tượng, trong khi PDO sử dụng cú pháp truyền thống cho các hàm.

Là đối tượng PDO

PDO hướng đối tượng .

Là đối tượng MySQLi

Tiện ích mở rộng mysqli có giao diện kép. Nó hỗ trợ mô hình lập trình hướng đối tượng và thủ tục . Người dùng di chuyển từ tiện ích mở rộng mysql cũ có thể thích giao diện thủ tục hơn. Giao diện thủ tục tương tự như giao diện của tiện ích mở rộng mysql cũ.

Lợi thế của PDO hoặc MySQLi là gì?

Cả PDO và MySQLi đều có những ưu điểm riêng. Như chúng ta đã thấy trước đó rằng PDO hoạt động trên 12 hệ thống cơ sở dữ liệu khác nhau , trong khi MySQL chỉ có thể hoạt động với cơ sở dữ liệu MySQL. Vì vậy, nếu chúng tôi muốn chuyển dự án của mình sang cơ sở dữ liệu khác, PDO sẽ giúp bạn dễ dàng. Trong MySQLi, chúng tôi phải viết lại toàn bộ mã.