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á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:
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à:
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.
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
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.
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.
Đố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ố?