PDO cung cấp một giao diện đẹp nhưng tính tổng quát hơn cũng có nghĩa là nhiều rắc rối hơn để đối phó với idiosyncrasies tinh tế của mỗi phụ trợ. Nếu bạn nhìn vào the bugtracker, nó có một số vấn đề mở và một số vấn đề nghiêm trọng.
Dưới đây là một bằng chứng giai thoại với postgresql: trình phân tích cú pháp của PDO gặp sự cố với standard_conforming_strings được đặt thành BẬT (hiện giờ là mặc định, như PG-9.1). trường hợp thử nghiệm với php-5.3.9:
$dbh->exec("SET standard_conforming_strings=on");
$p=$dbh->prepare("SELECT 1 WHERE 'ab\' = :foo AND 'cd' = :bar");
$p->execute(array(":foo" => "ab", ":bar" => "cd"));
Các thực() bất ngờ thất bại tại lớp PDO với Database error: SQLSTATE[HY093]: Invalid parameter number: :foo
. Dường như nó không thể xác định: foo là một tham số.
Nếu truy vấn dừng sau 'ab\'=:foo
, không có điều kiện khác, thì nó hoạt động tốt. Hoặc nếu điều kiện khác không bao gồm một chuỗi, nó cũng hoạt động tốt.
Sự cố có vẻ tương tự như issue #55335, đã bị loại bỏ là Không phải là lỗi, khá sai trong quan điểm của tôi. [Thực ra, tôi thậm chí đã tự mình hack PDO để sửa nó, nhưng theo cách không tương thích với các backend khác, vì vậy không có bản vá nào. Tôi đã bối rối bởi các phân tích từ vựng truy vấn được như vậy chung chung.]
Mặt khác, pg_ * gần hơn với libpq, loại sự cố này ít xảy ra hơn ở nơi đầu tiên và dễ giải quyết hơn nếu có.
Vì vậy, quan điểm của tôi sẽ không phải mọi thứ đều tốt đẹp với PDO. Bên trong, nó chắc chắn khó khăn hơn pg_ *, và phức tạp hơn có nghĩa là nhiều lỗi hơn. Các lỗi này có được giải quyết không? Dựa trên một số mục trình gỡ lỗi nhất định, không nhất thiết.
Nguồn
2012-04-30 19:37:02
@MorrisonHotel Xin lỗi tôi? – shadyyx
Nhận xét của tôi rất tệ, không phải Bạn :) – MorrisonHotel
PostgreSQL: ** SELECT TO_STRING (...) TỪ GIỚI HẠN CỦA TÔI 1 OFFSET 1 ** MySQL: ** CHỌN DATE_FORMAT (...) TỪ GIỚI HẠN CỦA TÔI 1.1 ** Như chúng ta thấy, ngay cả khi sử dụng PDO, tôi sẽ phải viết lại tất cả các yêu cầu tới cơ sở dữ liệu. Vì vậy, PDO không phải là thuốc chữa bách bệnh. Tôi sẽ phải sử dụng Doctrine, Propel, vv (bị loại trừ). – MorrisonHotel