2012-04-13 11 views
21

Đang cố gắng tìm hiểu điều gì đó mới - đặc biệt cố gắng chọn thời điểm để sử dụng MySQLi hoặc PDO cho các dự án trong tương lai khi làm việc với MySQL - Tôi tình cờ gặp this page hiển thị tổng quan về các tùy chọn có sẵn cho tôi.Báo cáo chuẩn bị phía khách hàng là gì?

Ở cuối trang này là bảng so sánh chức năng của ba phương pháp giao tiếp chính với mysql. Trong hàng "API hỗ trợ các báo cáo được chuẩn bị phía máy khách", nó nói rằng PDO hỗ trợ điều này và MySQLi thì không.

Tôi biết câu lệnh được chuẩn bị là gì. Câu trả lời cho this question là một ví dụ đơn giản về những gì tôi tin là các báo cáo được chuẩn bị phía máy chủ. Và PHP là một ngôn ngữ phía máy chủ, do đó sẽ có nghĩa là nó không quan trọng nếu các câu lệnh chuẩn bị phía máy khách có sẵn hay không. Nhưng điều đó làm cho tôi tự hỏi tại sao điều đó thậm chí được liệt kê trong hướng dẫn sử dụng PHP sau đó.

Vì vậy, các báo cáo được chuẩn bị phía khách hàng là gì?

+3

Tôi giả sử điều này sử dụng máy khách/máy chủ trong một ngữ cảnh khác với mô hình web - tức là MySQL là máy chủ và PHP là ứng dụng khách trong ngữ cảnh này. Mặc dù cả hai đều trên cùng một máy tính. –

+2

Chắc chắn điều này đề cập đến ['PDO :: ATTR_EMULATE_PREPARES'] (http://www.php.net/manual/en/pdo.setattribute.php), một thiết lập mô phỏng các câu lệnh đã chuẩn bị với nội suy và thoát. Điều này được thực hiện trong thư viện, vì vậy về mặt kỹ thuật phía máy khách, trước khi các yêu cầu được chuyển đến máy chủ DB. – mario

+0

@MattFenwick Mặc dù điều này có thể có ý nghĩa hoàn hảo, nhưng điều này không giải thích tại sao cùng một bảng hiển thị hỗ trợ cho các câu lệnh được chuẩn bị phía máy chủ cho tất cả các thư viện, nhưng chỉ một trong số chúng hỗ trợ phía máy khách nếu chúng ta chấp nhận tiền đề rằng PHP là khách hàng. – Repox

Trả lời

28

Rõ ràng, các câu lệnh chuẩn bị phía máy khách là các câu lệnh được chuẩn bị bởi máy khách, chứ không phải máy chủ.

PDO là lớp trừu tượng truy cập dữ liệu hỗ trợ nhiều giao diện DBMS (trình điều khiển), một số hỗ trợ các câu lệnh chuẩn bị phía máy chủ (ví dụ: MySQL 4.1+), một số không (ví dụ: MySQL 3) . Trong trường hợp trình điều khiển PDO không hỗ trợ các câu lệnh chuẩn bị phía máy chủ, PDO sẽ mô phỏng chúng ở phía máy khách và sử dụng giao diện truy vấn chung để thực thi chúng. Lý do tại sao MySQLi không hỗ trợ chúng là đơn giản: MySQLi là một phần mở rộng đặc trưng cho MySQL, một RDBMS thực sự hỗ trợ các câu lệnh chuẩn bị phía máy chủ, vì vậy không có lý do gì để mô phỏng chúng.

13

Giống như đã được nói trong các nhận xét, trong trường hợp này "khách hàng" đề cập đến PHP và "máy chủ" đối với MySQL. PDO hỗ trợ cơ sở dữ liệu khác với MySQL. Không phải tất cả các trình điều khiển cơ sở dữ liệu/db này đều hỗ trợ các câu lệnh chuẩn bị sẵn sàng, và trong những trường hợp đó, PDO sẽ mô phỏng các câu lệnh này. MySQLi sẽ không (Tôi không biết chắc chắn khi nào nó sẽ phải làm như vậy - có thể khi nó đang xử lý một trình điều khiển MySQL cũ?).

Một yếu tố nữa bạn có thể muốn xem xét - một số khung công tác PHP yêu cầu PDO và không hỗ trợ mysqli.

2

Với PDO, bạn có thể sử dụng câu lệnh đã chuẩn bị (trong mã) cho dù cơ sở dữ liệu mà bạn đang kết nối với PDO có hỗ trợ hay không.

Nếu máy chủ xử lý các câu lệnh đã chuẩn bị, thì PDO sẽ cho phép máy chủ xử lý chúng (phía máy chủ). Nếu không, thì PDO đơn giản mô phỏng các câu lệnh đã chuẩn bị trong PDO (phía máy khách), nhưng cuối cùng phải gửi mỗi truy vấn đến máy chủ.