2011-10-27 43 views
5

5 năm trước (! Thực sự) Wez Furlong là nhà phát triển chính của PDO và ông viết này:Tôi có thể sử dụng các câu lệnh chuẩn bị thực sự cho MySQL với PDO ngay bây giờ không?

tôi khuyên bạn nên sử dụng các thuộc tính sau khi làm việc với PDO :: MYSQL, có sẵn trong PHP hiện tại 5.1.3 ứng viên phát hành và ảnh chụp nhanh:

$ db-> setAttribute (PDO :: ATTR_EMULATE_PREPARES, true);

Điều này làm cho trình phân tích cú pháp truy vấn gốc PDO được sử dụng thay vì các API báo cáo được chuẩn bị gốc trong ứng dụng khách mysql và hiệu quả là loại bỏ các vấn đề đó.

Lý do được đưa ra tại http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/

Tuy nhiên, ông không thể trả lời nếu các vấn đề đã được khắc phục bây giờ mà PDO đang sử dụng Mysqlnd (ít nhất là tôi giả sử nó là).

Có ai biết không?

Trả lời

6

Có, nếu bạn đặt ATTR_EMULATE_PREPARES thành false (hoặc 0), nó sẽ sử dụng báo cáo được chuẩn bị thực tế.

Sắp xếp. Nó vẫn có tất cả các logic dự phòng. Vì vậy, trong khi mysqli :: chuẩn bị sẽ thất bại nếu chuẩn bị từ máy chủ thất bại, PDO sẽ không như nó sẽ rơi trở lại để thi đua chuẩn bị. Lý do cho điều này là để PDO có thể sử dụng các câu lệnh đã chuẩn bị trên các phiên bản của MySQL không hỗ trợ nó, cũng như cho các câu lệnh (chẳng hạn như ALTER) không hỗ trợ chuẩn bị.

Vì vậy, nó sẽ sử dụng báo cáo chuẩn bị thực tế bất cứ khi nào MySQL sẽ cho phép bạn (một lần nữa, chỉ khi ATTR_EMULATE_PREPARES đến sai) ...

Các vấn đề liên quan