Chỉnh sửa câu trả lời.
Sau khi có một số kinh nghiệm với cả hai API này, tôi sẽ nói rằng có 2 tính năng cấp chặn chặn khiến mysqli không thể sử dụng được với các câu lệnh được chuẩn bị sẵn.
Họ đã được đề cập trong 2 câu trả lời xuất sắc (chưa được đánh giá thấp):
- Giá trị ràng buộc với số lượng giữ chỗ tùy ý
- Trả lại dữ liệu dưới dạng một mảng
(cả hai cũng được đề cập trong câu trả lời này )
Vì một số lý do, mysqli đã thất bại với cả hai.
Ngày nay, nó đã có một số cải tiến cho cái thứ hai ( get_result ), nhưng nó chỉ hoạt động trên các cài đặt mysqlnd, có nghĩa là bạn không thể dựa vào chức năng này trong các tập lệnh của mình.
Tuy nhiên, nó không có ràng buộc theo giá trị cho đến ngày nay.
Vì vậy, chỉ có một lựa chọn: PDO
Tất cả các lý do khác, chẳng hạn như
- giữ chỗ được đặt tên (cú pháp đường này được đánh giá quá cao)
- hỗ trợ cơ sở dữ liệu khác nhau (không ai thực sự từng sử dụng nó)
- tìm nạp vào đối tượng (chỉ là cú pháp đường vô dụng)
- chênh lệch tốc độ (không có)
không có tầm quan trọng đáng kể.
Đồng thời cả hai API này đều thiếu một số tính năng thực sự quan trọng , như
- giữ chỗ định danh
- giữ chỗ cho các kiểu dữ liệu phức tạp để làm cho ràng buộc động ít gây hại hơn
- mã ứng dụng ngắn hơn.
Vì vậy, để đáp ứng nhu cầu thực tế , người ta phải tạo thư viện trừu tượng của riêng mình, dựa trên một trong các API này, triển khai các trình giữ chỗ được phân tích cú pháp thủ công. Trong trường hợp này tôi thích mysqli hơn, vì nó có mức độ trừu tượng ít hơn.