MySQL vs MySQLi khi sử dụng PHP [đã đóng]


167

Cái nào tốt hơn, MySQL hay MySQLi? Và tại sao? Tôi nên sử dụng cái nào?

Tôi có nghĩa là tốt hơn không chỉ về hiệu suất, mà bất kỳ tính năng có liên quan khác.

Câu trả lời:


111

Nếu bạn có cái nhìn tổng quan về phần mở rộng cải tiến của MySQL , nó sẽ cho bạn biết mọi thứ bạn cần biết về sự khác biệt giữa hai phần.

Các tính năng hữu ích chính là:

  • giao diện hướng đối tượng
  • hỗ trợ cho các báo cáo đã chuẩn bị
  • hỗ trợ cho nhiều báo cáo
  • hỗ trợ giao dịch
  • tăng cường khả năng sửa lỗi
  • hỗ trợ máy chủ nhúng.

1
vâng, điều tốt nhất là mysqli hỗ trợ các báo cáo đã chuẩn bị
jondinham

7
Cũng cần lưu ý rằng MySQLi chỉ hoạt động với MySQL 5+. Điều này thực sự không còn phù hợp nữa, nhưng khi MySQL ra mắt, MySQL 4 vẫn là tiêu chuẩn. Đây là một phần lý do các phần mở rộng riêng biệt, trình điều khiển MySQL cũ ở đó cho mục đích tương thích.
zneak

6
Điều đáng chú ý là mọi thứ đã thay đổi rất nhiều trong sáu năm. mysql_*()hiện không được chấp nhận và sẽ sớm được gỡ bỏ . Bạn không nên sử dụng nó cho mã mới.

Chúng ta nên chọn loại nào có ít CPU và RAM hơn?
Mahdi Jazini

1
Xem câu trả lời của Gordon dưới đây. Tiện ích mở rộng mysql cũ không còn được hỗ trợ nữa nên bạn sẽ sử dụng tiện ích mở rộng mysqli tốt hơn.
Đánh dấu Davidson

70

Có một trang hướng dẫn dành riêng để giúp lựa chọn giữa mysql, mysqli và PDO tại

Nhóm PHP khuyến nghị mysqli hoặc PDO_MySQL để phát triển mới:

Bạn nên sử dụng các phần mở rộng mysqli hoặc PDO_MyQuery. Không nên sử dụng phần mở rộng mysql cũ để phát triển mới. Một ma trận so sánh tính năng chi tiết được cung cấp dưới đây. Hiệu suất tổng thể của cả ba phần mở rộng được coi là giống nhau. Mặc dù hiệu năng của tiện ích mở rộng chỉ đóng góp một phần nhỏ trong tổng thời gian chạy của yêu cầu web PHP. Thông thường, tác động thấp đến 0,1%.

Trang này cũng có một ma trận tính năng so sánh các API mở rộng. Sự khác biệt chính giữa mysqli và mysql API như sau:

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.iternals/53799

Có một ma trận tính năng bổ sung so sánh các thư viện (mysqlnd mới so với libmysql) tại

và một bài viết blog rất kỹ lưỡng tại


15

Tôi đã từ bỏ sử dụng mysqli. Nó chỉ đơn giản là quá không ổn định. Tôi đã có các truy vấn làm sập PHP bằng mysqli nhưng chỉ hoạt động tốt với gói mysql. Ngoài ra mysqli gặp sự cố trên các cột LONGTEXT . Lỗi này đã được đưa ra dưới nhiều hình thức khác nhau kể từ ít nhất là năm 2005 và vẫn bị hỏng . Tôi thực sự muốn sử dụng các báo cáo đã chuẩn bị nhưng mysqli chỉ không đủ tin cậy (và dường như không ai muốn sửa nó). Nếu bạn thực sự muốn báo cáo chuẩn bị đi với PDO.


2
PDO cũng không hoàn hảo lắm (tôi đã chạy vào một số coredumps khó chịu với nó), nhưng ít nhất nó có cơ sở người dùng rộng hơn, vì vậy có lẽ đó là một vụ cá cược an toàn hơn.
troelskn

@troelskn, vậy mys mys bình thường không tốt hơn sao?
Pacerier

@Pacerier Xem xét rằng nó không được chấp nhận, tôi sẽ nói không. Nhìn chung, dường như PDO đã trở thành lựa chọn tiêu chuẩn.
troelskn

@troelskn, nhưng không dùng nữa không có nghĩa gì ngoại trừ việc nó sẽ không có trong các phiên bản trong tương lai. Về mặt ổn định, không phải mysql bình thường ổn định hơn?
Pacerier

1
Tại thời điểm này (5.5) PHP sẽ chủ động đưa ra các cảnh báo nếu bạn sử dụng nó: php.net/manual/en/migration55.deprecated.php
troelskn

13

MySQLi là viết tắt của MySQL được cải thiện. Đó là một giao diện hướng đối tượng đến các ràng buộc MySQL giúp mọi thứ dễ sử dụng hơn. Nó cũng cung cấp hỗ trợ cho các báo cáo đã chuẩn bị ( rất hữu ích). Nếu bạn đang dùng PHP 5, hãy sử dụng MySQLi.


5

Những gì tốt hơn là PDO; đó là một giao diện ít hoàn hảo hơn và cũng cung cấp các tính năng tương tự như MySQLi.

Sử dụng các câu lệnh được chuẩn bị là tốt vì nó giúp loại bỏ các khả năng tiêm SQL; sử dụng báo cáo chuẩn bị phía máy chủ là xấu vì nó làm tăng số lượng chuyến đi khứ hồi.


3

Đối với tôi, báo cáo chuẩn bị là một tính năng phải có. chính xác hơn, ràng buộc tham số (chỉ hoạt động trên các câu lệnh đã chuẩn bị). đó là cách thực sự lành mạnh duy nhất để chèn chuỗi vào các lệnh SQL. tôi thực sự không tin tưởng các chức năng 'thoát'. kết nối DB là một giao thức nhị phân, tại sao lại sử dụng giao thức con giới hạn ASCII cho các tham số?


1
PDO thường sử dụng các câu lệnh được chuẩn bị phía máy khách, vì vậy chúng không thực sự được chuẩn bị trên máy chủ - nhưng điều này là tốt, vì nó tiết kiệm tài nguyên máy chủ và thường hoạt động tốt hơn. Tuyên bố chuẩn bị "thi đua" sẽ luôn thoát khỏi mọi thứ một cách chính xác.
MarkR

1
"Luôn luôn" và "thoát" là những từ nguy hiểm khi đi cùng nhau. tôi không biết, có lẽ mã này hoàn toàn không có lỗi; Nhưng tại sao phải bận tâm, khi một giao thức nhị phân thực sự có sẵn? đối với hiệu suất, đó là mở cho điểm chuẩn.
Javier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.