Mysqli có bị phản đối không

MySQL và MySQLi là các phần mở rộng cơ sở dữ liệu PHP được triển khai bằng cách sử dụng khung mở rộng PHP. Phần mở rộng cơ sở dữ liệu PHP được sử dụng để viết mã PHP để truy cập cơ sở dữ liệu. Họ hiển thị API cơ sở dữ liệu để cung cấp giao diện để sử dụng các chức năng cơ sở dữ liệu

Tiện ích mở rộng MySQL không được dùng nữa và sẽ không khả dụng trong các phiên bản PHP trong tương lai. Nên sử dụng tiện ích mở rộng MySQLi với PHP 5. 5 trở lên

MySQL MySQLi Sự khác biệt

Có quá nhiều sự khác biệt giữa các phần mở rộng cơ sở dữ liệu PHP này. Những khác biệt này dựa trên một số yếu tố như hiệu suất, chức năng thư viện, tính năng, lợi ích và các yếu tố khác

Phần mở rộng MySQLMySQLiMySQL được thêm vào phiên bản PHP 2. 0. và không được dùng nữa kể từ PHP 5. 5. 0. Tiện ích mở rộng MySQLi được thêm vào trong PHP 5. 5 và sẽ hoạt động trên MySQL 4. 1. 3 trở lên. Không hỗ trợ báo cáo chuẩn bị. MySQLi hỗ trợ báo cáo chuẩn bị. MySQL cung cấp giao diện thủ tục. MySQLi cung cấp cả giao diện thủ tục và hướng đối tượng. Tiện ích mở rộng MySQL không hỗ trợ các thủ tục được lưu trữ. MySQLi hỗ trợ thủ tục lưu trữ. Tiện ích mở rộng MySQL chậm hơn về bảo mật và các tính năng đặc biệt khác, tương đối. Tiện ích mở rộng MySQLi với bảo mật nâng cao và gỡ lỗi được cải thiện. Các giao dịch chỉ được xử lý bởi các truy vấn SQL. MySQLi hỗ trợ các giao dịch thông qua API. Thư mục mở rộng. máy lẻ/mysql. Thư mục mở rộng. máy lẻ/mysqli

Ghi chú

Mặc dù tiện ích mở rộng MySQL không được dùng nữa, nhưng nó sẽ có sẵn để tương thích ngược. Nhưng không sử dụng nếu bạn đang bắt đầu một cái gì đó mới và khuyên bạn nên chuyển phần mở rộng cũ hơn từ MySQL sang MySQLi

Đúng là tiện ích mở rộng MySQL không được dùng nữa và thay vào đó nên sử dụng MySQLi hoặc PDO

MySQLi (MySQL cải tiến) là một phần mở rộng nâng cao của MySQL. Nó được phát triển để tận dụng các tính năng mới có trong hệ thống MySQL phiên bản 4. 1. 3 trở lên. MySQLi là một phần mở rộng hướng đối tượng, trong khi phần mở rộng MySQL ban đầu thì không. Điều này có nghĩa là với MySQLi, bạn có thể sử dụng các kỹ thuật OOP để viết mã của mình

PDO (Đối tượng dữ liệu PHP) là lớp truy cập cơ sở dữ liệu cung cấp phương thức truy cập thống nhất vào nhiều cơ sở dữ liệu. Nó cung cấp một lớp trừu tượng truy cập dữ liệu, có nghĩa là, bất kể bạn đang sử dụng cơ sở dữ liệu nào, bạn đều sử dụng các chức năng giống nhau để đưa ra truy vấn và tìm nạp dữ liệu. Điều này giúp chuyển đổi giữa các cơ sở dữ liệu dễ dàng hơn nếu ứng dụng của bạn yêu cầu

Cả MySQLi và PDO đều có những lợi ích và hạn chế riêng và bạn nên chọn cái nào tùy thuộc vào nhu cầu và sở thích cụ thể của bạn

Tiện ích mở rộng MySQLi (MySQL được cải tiến) là trình điều khiển cơ sở dữ liệu quan hệ được sử dụng trong ngôn ngữ kịch bản PHP để cung cấp giao diện với cơ sở dữ liệu MySQL

Có ba tùy chọn API chính khi xem xét kết nối với máy chủ cơ sở dữ liệu MySQL

  • Phần mở rộng MySQL của PHP
  • Phần mở rộng MySQLi của PHP
  • Đối tượng dữ liệu PHP (PDO)

Mã PHP bao gồm một lõi, với các phần mở rộng tùy chọn cho chức năng cốt lõi. Các phần mở rộng liên quan đến MySQL của PHP, chẳng hạn như phần mở rộng MySQLi và phần mở rộng MySQL, được triển khai bằng cách sử dụng khung mở rộng PHP. Tiện ích mở rộng thường hiển thị API cho nhà phát triển PHP, để cho phép các tiện ích của nó được sử dụng theo chương trình. Tuy nhiên, một số tiện ích mở rộng sử dụng khung tiện ích mở rộng PHP không hiển thị API cho nhà phát triển PHP

Ví dụ: phần mở rộng trình điều khiển PDO MySQL không hiển thị API cho nhà phát triển PHP, nhưng cung cấp giao diện cho lớp PDO phía trên nó

MySQLi là phiên bản cải tiến của trình điều khiển MySQL PHP cũ hơn, mang lại nhiều lợi ích khác nhau. [1]

Các tác giả của ngôn ngữ kịch bản PHP khuyên bạn nên sử dụng MySQLi khi xử lý máy chủ MySQL phiên bản 4. 1. 3 và mới hơn (tận dụng chức năng mới). [1]

Chi tiết kỹ thuật[sửa]

Tiện ích mở rộng MySQLi cung cấp nhiều lợi ích khác nhau so với phiên bản tiền nhiệm của nó, trong đó nổi bật nhất (theo trang web PHP[1]) là

  • Giao diện hướng đối tượng
  • Hỗ trợ cho báo cáo chuẩn bị
  • Hỗ trợ cho nhiều câu lệnh
  • Hỗ trợ giao dịch
  • Hỗ trợ sửa lỗi nâng cao

So sánh các tính năng [1][sửa]

Phần mở rộng MySQLi của PHPPhiên bản PHP Phần mở rộng MySQL của PHP được giới thiệu5. 05. 0pre-3. 0Được bao gồm trong PHP 5. xYesYesYesĐược bao gồm trong PHP 7. xYesYesNoTrạng thái phát triểnĐang phát triểnĐang phát triển kể từ PHP 5. 3Không dùng nữa kể từ PHP 5. 5
Đã xóa trong PHP 7. 0Được MySQL đề xuất cho các dự án mớiCó - tùy chọn ưu tiênCóKhôngAPI hỗ trợ Bộ ký tựCóCóKhôngAPI hỗ trợ các câu lệnh đã chuẩn bị phía máy chủCóCóKhôngAPI hỗ trợ các câu lệnh đã chuẩn bị phía máy kháchKhôngCóKhôngAPI hỗ trợ các thủ tục được lưu trữCóCóKhôngAPI hỗ trợ nhiều câu lệnhCóHầu hếtKhôngHỗ trợ tất cả MySQL 4. 1+ chức năngCóHầu hếtKhông

Giao diện kép[sửa]

Tiện ích mở rộng MySQLi có giao diện kép - nó hỗ trợ cả 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 phần mở rộng MySQL cũ. Trong nhiều trường hợp, tên hàm chỉ khác nhau bởi tiền tố. Một số hàm MySQLi lấy điều khiển kết nối làm đối số đầu tiên của chúng, trong khi các hàm khớp trong giao diện MySQL cũ lấy nó làm đối số cuối cùng tùy chọn

Các lệnh gọi hàm gốc mới và cũ

Kết nối[sửa]

Máy chủ MySQL hỗ trợ sử dụng các lớp vận chuyển khác nhau cho các kết nối. Các kết nối sử dụng TCP/IP, ổ cắm tên miền Unix hoặc đường ống có tên Windows

Tên máy chủ

connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
2 có một ý nghĩa đặc biệt. Nó bị ràng buộc với việc sử dụng ổ cắm tên miền Unix. Không thể mở kết nối TCP/IP bằng tên máy chủ
connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
2, thay vào đó bạn phải sử dụng
connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
4

Thí dụ. Ý nghĩa đặc biệt của localhost

connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>

đầu ra

Localhost via UNIX socket
127.0.0.1 via TCP/IP

Các tuyên bố thực thi[sửa]

Các câu lệnh có thể được thực thi với các hàm mysqli_query(), mysqli_real_query() và mysqli_multi_query(). Hàm mysqli_query() là phổ biến nhất và kết hợp câu lệnh thực thi với tìm nạp vào bộ đệm tập kết quả của nó, nếu có, trong một lệnh gọi. Gọi mysqli_query() giống như gọi mysqli_real_query() theo sau là mysqli_store_result()

Thí dụ. Kết nối với MySQL

connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
    !$mysqli->query("CREATE TABLE test(id INT)") ||
    !$mysqli->query("INSERT INTO test(id) VALUES (1)")) {
    echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
?>

Bộ đệm kết quả

Sau khi kết quả thực hiện câu lệnh có thể được truy xuất ngay lập tức để được lưu vào bộ đệm của máy khách hoặc bằng cách đọc từng hàng. Bộ đệm tập kết quả phía máy khách cho phép máy chủ giải phóng tài nguyên được liên kết với kết quả câu lệnh càng sớm càng tốt. Nói chung, khách hàng là tập hợp kết quả tiêu thụ chậm. Do đó, nên sử dụng bộ kết quả đệm. mysqli_query() kết hợp thực thi câu lệnh và bộ đệm tập kết quả

Các ứng dụng PHP có thể điều hướng tự do thông qua các kết quả được đệm. Điều hướng nhanh vì tập hợp kết quả được giữ trong bộ nhớ máy khách. Xin lưu ý rằng việc mở rộng quy mô theo máy khách thường dễ dàng hơn là mở rộng quy mô máy chủ

Thí dụ. Điều hướng qua các kết quả được đệm

connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
    !$mysqli->query("CREATE TABLE test(id INT)") ||
    !$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)")) {
    echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

$res = $mysqli->query("SELECT id FROM test ORDER BY id ASC");

echo "Reverse order...\n";
for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--) {
    $res->data_seek($row_no);
    $row = $res->fetch_assoc();
    echo " id = " . $row['id'] . "\n";
}

echo "Result set order...\n";
$res->data_seek(0);
while ($row = $res->fetch_assoc()) {
    echo " id = " . $row['id'] . "\n";
}
?>

Ví dụ trên sẽ xuất ra

________số 8

Tập hợp kết quả không có bộ đệm

Nếu bộ nhớ máy khách là một tài nguyên ngắn và không cần giải phóng tài nguyên máy chủ càng sớm càng tốt để giữ cho máy chủ tải ở mức thấp, thì có thể sử dụng các kết quả không có bộ đệm. Không thể cuộn qua các kết quả không có bộ đệm trước khi tất cả các hàng đã được đọc

Thí dụ. Điều hướng qua các kết quả không có bộ đệm

real_query("SELECT id FROM test ORDER BY id ASC");
$res = $mysqli->use_result();

echo "Result set order...\n";
while ($row = $res->fetch_assoc()) {
    echo " id = " . $row['id'] . "\n";
}
?>

Loại dữ liệu giá trị tập hợp kết quả

Các hàm mysqli_query(), mysqli_real_query() và mysqli_multi_query() được sử dụng để thực thi các câu lệnh không chuẩn bị trước. Ở cấp độ của Giao thức máy chủ máy khách MySQL, lệnh COM_QUERY và giao thức văn bản được sử dụng để thực thi câu lệnh. Với giao thức văn bản, máy chủ MySQL chuyển đổi tất cả dữ liệu của tập kết quả thành chuỗi trước khi gửi. Chuyển đổi này được thực hiện bất kể kiểu dữ liệu cột tập hợp kết quả SQL. Các thư viện máy khách MySQL nhận tất cả các giá trị cột dưới dạng chuỗi. Không có quá trình truyền phía máy khách nào được thực hiện để chuyển đổi các cột trở lại kiểu gốc của chúng. Thay vào đó, tất cả các giá trị được cung cấp dưới dạng chuỗi PHP

Thí dụ. Giao thức văn bản trả về chuỗi theo mặc định

connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
0

Ví dụ trên sẽ xuất ra

connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
1

Có thể chuyển đổi các cột số nguyên và số float trở lại số PHP bằng cách đặt tùy chọn kết nối MYSQLI_OPT_INT_AND_FLOAT_NATIVE, nếu sử dụng thư viện mysqlnd. Nếu được đặt, thư viện mysqlnd sẽ kiểm tra các loại cột siêu dữ liệu của tập kết quả và chuyển đổi các cột SQL dạng số thành số PHP, nếu phạm vi giá trị của loại dữ liệu PHP cho phép. Bằng cách này, ví dụ, các cột SQL INT được trả về dưới dạng số nguyên

Thí dụ. Các kiểu dữ liệu gốc với mysqlnd và tùy chọn kết nối

connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
2

Ví dụ trên sẽ xuất ra

connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
0

Báo cáo chuẩn bị [ chỉnh sửa ]

Cơ sở dữ liệu MySQL hỗ trợ các câu lệnh đã chuẩn bị. Một câu lệnh đã chuẩn bị hoặc một câu lệnh được tham số hóa được sử dụng để thực hiện lặp đi lặp lại cùng một câu lệnh với hiệu quả cao

quy trình làm việc cơ bản

Việc thực hiện câu lệnh chuẩn bị bao gồm hai giai đoạn. chuẩn bị và thực hiện. Ở giai đoạn chuẩn bị, một mẫu câu lệnh được gửi đến máy chủ cơ sở dữ liệu. Máy chủ thực hiện kiểm tra cú pháp và khởi tạo tài nguyên nội bộ của máy chủ để sử dụng sau này

Máy chủ MySQL hỗ trợ sử dụng trình giữ chỗ ẩn danh, có vị trí với ?

Xem ví dụ trong. [3]

Các thủ tục được lưu trữ [4][sửa]

Cơ sở dữ liệu MySQL hỗ trợ thủ tục lưu sẵn. Một thủ tục được lưu trữ là một chương trình con được lưu trữ trong danh mục cơ sở dữ liệu. Các ứng dụng có thể gọi và thực thi thủ tục lưu sẵn. Câu lệnh CALL SQL được sử dụng để thực thi thủ tục lưu sẵn

Tham số

Các thủ tục được lưu trữ có thể có các tham số IN, INOUT và OUT, tùy thuộc vào phiên bản MySQL. Giao diện MySQLi không có khái niệm đặc biệt cho các loại tham số khác nhau

tham số IN

Tham số đầu vào được cung cấp với câu lệnh CALL. Vui lòng đảm bảo các giá trị được thoát chính xác

Xem các ví dụ trong. [4]

Nhiều câu [5][sửa]

MySQL tùy chọn cho phép có nhiều câu lệnh trong một chuỗi câu lệnh. Gửi nhiều câu lệnh cùng một lúc làm giảm các chuyến đi khứ hồi giữa máy khách và máy chủ nhưng yêu cầu xử lý đặc biệt

Nhiều câu lệnh hoặc nhiều truy vấn phải được thực thi với mysqli_multi_query(). Các câu lệnh riêng lẻ của chuỗi câu lệnh được phân tách bằng dấu chấm phẩy. Sau đó, tất cả các tập kết quả được trả về bởi các câu lệnh đã thực hiện phải được tìm nạp

Máy chủ MySQL cho phép có các câu lệnh trả về tập kết quả và câu lệnh không trả về tập kết quả trong một câu lệnh nhiều lần

Xem các ví dụ trong [5]

Hỗ trợ API cho giao dịch [6][sửa]

Máy chủ MySQL hỗ trợ các giao dịch tùy thuộc vào công cụ lưu trữ được sử dụng. Kể từ MySQL 5. 5, công cụ lưu trữ mặc định là InnoDB. InnoDB có hỗ trợ giao dịch ACID đầy đủ

Giao dịch có thể được kiểm soát bằng lệnh gọi SQL hoặc API. Bạn nên sử dụng lệnh gọi API để bật và tắt chế độ tự động cam kết cũng như để cam kết và khôi phục các giao dịch

Ví dụ ở đây. [6]

Tập kết quả MySQL chứa siêu dữ liệu. Siêu dữ liệu mô tả các cột được tìm thấy trong tập hợp kết quả. Tất cả siêu dữ liệu được gửi bởi MySQL đều có thể truy cập thông qua giao diện MySQLi. Tiện ích mở rộng không thực hiện hoặc thay đổi không đáng kể đối với thông tin mà nó nhận được. Sự khác biệt giữa các phiên bản máy chủ MySQL không được căn chỉnh

Dữ liệu meta được truy cập thông qua giao diện mysqli_result

Xem thêm tại đây. [7]

Phần mở rộng MySQLi và các kết nối liên tục [1][sửa]

Hỗ trợ kết nối liên tục đã được giới thiệu trong PHP 5. 3 cho phần mở rộng MySQLi. Hỗ trợ đã có trong PDO MYSQL và ext/mysql. Ý tưởng đằng sau các kết nối liên tục là kết nối giữa quy trình máy khách và cơ sở dữ liệu có thể được sử dụng lại bởi quy trình máy khách, thay vì được tạo và hủy nhiều lần. Điều này làm giảm chi phí tạo kết nối mới mỗi khi cần một kết nối, vì các kết nối không sử dụng được lưu vào bộ đệm và sẵn sàng để sử dụng lại

Không giống như phần mở rộng MySQL, MySQLi không cung cấp chức năng riêng để mở các kết nối liên tục. Để mở một kết nối liên tục, bạn phải thêm p. đến tên máy chủ khi kết nối

Vấn đề với các kết nối liên tục là chúng có thể bị khách hàng bỏ lại ở trạng thái không thể đoán trước. Ví dụ: khóa bảng có thể được kích hoạt trước khi máy khách kết thúc đột ngột. Một quy trình máy khách mới sử dụng lại kết nối liên tục này sẽ nhận được kết nối "nguyên trạng". Bất kỳ quá trình dọn dẹp nào cũng cần phải được thực hiện bởi quy trình máy khách mới trước khi nó có thể tận dụng tốt kết nối liên tục, làm tăng gánh nặng cho lập trình viên

Tuy nhiên, kết nối liên tục của tiện ích mở rộng MySQLi cung cấp mã xử lý dọn dẹp tích hợp. Việc dọn dẹp được thực hiện bởi MySQLi bao gồm

  • Phục hồi các giao dịch đang hoạt động
  • Đóng và thả các bảng tạm thời
  • Mở khóa các bảng
  • Đặt lại các biến phiên
  • Đóng các câu lệnh đã chuẩn bị sẵn (luôn xảy ra với PHP)
  • Đóng xử lý
  • Phát hành khóa thu được với GET_LOCK()

Điều này đảm bảo rằng các kết nối liên tục ở trạng thái sạch khi được trả về từ nhóm kết nối, trước khi quy trình máy khách sử dụng chúng

Tiện ích mở rộng MySQLi thực hiện việc dọn dẹp này bằng cách tự động gọi hàm C-API mysql_change_user()

Tính năng dọn dẹp tự động có những ưu điểm và nhược điểm. Ưu điểm là nhà phát triển không còn phải lo lắng về việc thêm mã dọn dẹp vì nó được gọi tự động. Tuy nhiên, nhược điểm là mã có thể chậm hơn một chút, vì mã để thực hiện dọn dẹp cần chạy mỗi khi kết nối được trả về từ nhóm kết nối

Có thể tắt mã dọn dẹp tự động bằng cách biên dịch PHP với MYSQLI_NO_CHANGE_USER_ON_PCONNECT được xác định

MySQLi có bị phản đối trong PHP 8 không?

Kể từ PHP 8. 2 trở lên, việc biên dịch phần mở rộng mysqli với libmysql không còn được hỗ trợ nữa . Lưu ý rằng vẫn có thể biên dịch phần mở rộng pdo_mysql bằng libmysql , hỗ trợ cho libmysql có thể bị loại bỏ trong phần mở rộng pdo_mysql trong tương lai.

MySQLi có tốt hơn PDO không?

Ưu điểm chính của PDO so với MySQLi là hỗ trợ cơ sở dữ liệu . PDO hỗ trợ 12 loại cơ sở dữ liệu khác nhau, trái ngược với MySQLi, chỉ hỗ trợ MySQL. Khi 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ẽ làm cho quy trình trở nên đơn giản hơn.

MySQLi có tốt hơn MySQL không?

Về cơ bản, MySQL là trình điều khiển cơ sở dữ liệu cũ và MySQLi là trình điều khiển được cải tiến . Chữ "i" là viết tắt của từ "improved" tức là MySQL đã được cải thiện. MySQLi có thể được thực hiện theo thủ tục và hướng đối tượng trong khi MySQL chỉ có thể được sử dụng theo thủ tục. Mysqli cũng hỗ trợ các câu lệnh đã chuẩn bị để bảo vệ khỏi SQL Injection.

MySQLi có chạy PHP 7 không?

Theo mặc định, tiện ích mở rộng MySQLi bị tắt trong PHP 7 .