2009-02-14 84 views
148

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

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

Trả lời

97

Nếu bạn có một cái nhìn tại MySQL Improved Extension Overview, nó sẽ cho bạn biết tất cả mọi thứ bạn cần biết về sự khác biệt giữa hai.

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

  • một
  • hỗ trợ hướng đối tượng giao diện cho chuẩn bị phát biểu
  • hỗ trợ nhiều báo cáo
  • hỗ trợ cho các giao dịch
  • tăng cường khả năng gỡ lỗi
  • hỗ trợ máy chủ nhúng.
+0

yeah, điều tốt nhất là mysqli hỗ trợ chuẩn bị phát biểu – jondinham

+6

Nó cũng cần lưu ý rằng MySQLi chỉ làm việc với MySQL 5 +. Điều này không thực sự có liên quan nữa, nhưng khi MySQLi xuất hiện, MySQL 4 vẫn là tiêu chuẩn. Đây là một phần của lý do các phần mở rộng là riêng biệt, trình điều khiển MySQL cũ ở đó cho mục đích tương thích. – zneak

+5

Cần lưu ý rằng 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ẽ bị xóa__ sớm. Bạn không nên sử dụng nó cho mã mới. –

4

Điều gì là tốt hơn là PDO; đó là một giao diện ít crufty và cũng cung cấp các tính năng tương tự như MySQLi.

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

10

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ị (là rất hữu ích). Nếu bạn đang sử dụng PHP 5, hãy sử dụng MySQLi.

3

đối với tôi, báo cáo đã chuẩn bị là 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 duy nhất thực sự lành mạnh để 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 hạn chế ASCII cho các tham số?

+1

PDO thường sử dụng các câu lệnh 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. Câu lệnh "thi đua" được chuẩn bị sẽ luôn 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ó thể mã này hoàn toàn không có lỗi; nhưng tại sao bận tâm, khi một giao thức nhị phân thực có sẵn? về hiệu suất, điều đó mở cho điểm chuẩn. – Javier

14

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

+2

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

+0

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

+0

@Pacerier Xét rằng nó không được chấp nhận, tôi sẽ nói không. Nói chung, có vẻ như PDO đã trở thành sự lựa chọn tiêu chuẩn. – troelskn

67

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

Đội PHP khuyến mysqli hoặc PDO_MySQL cho sự phát triển mới:

Bạn nên sử dụng thẻ của tôi phần mở rộng qli hoặc PDO_MySQL. 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 bên dưới. 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 suất của phần mở rộng chỉ đóng góp một phần nhỏ trong tổng thời gian chạy của một yêu cầu web PHP.Thông thường, tác động là thấp đến 0,1%.

Trang cũng có ma trận tính năng so sánh các API tiện ích 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.internals/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à rất kỹ lưỡng b đăng bài viết tại