PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Hàm PDO và pg_ *

PDO cung cấp một giao diện đẹp nhưng tính chung chung hơn cũng đồng nghĩa với việc gặp nhiều rắc rối hơn khi đối phó với các đặc điểm riêng tinh tế của mỗi chương trình phụ trợ. Nếu bạn nhìn vào trình kiểm tra lỗi, nó có một số vấn đề còn mở và một số vấn đề nghiêm trọng.

Đâ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 là mặc định, kể từ 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"));

Thực thi () bất ngờ bị lỗi ở lớp PDO với Database error: SQLSTATE[HY093]: Invalid parameter number: :foo . Có vẻ như nó không thể xác định:foo là một tham số.

Nếu truy vấn dừng sau 'ab\'=:foo Nếu 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ố trông tương tự như sự cố # 55335, đã bị loại bỏ là Không phải lỗi , khá sai theo quan điểm của tôi. [Thực ra, tôi thậm chí còn tự mình hack PDO để sửa nó, nhưng theo cách không tương thích với các phụ trợ khác, vì vậy không có bản vá. Tôi đã bị bối rối bởi trình phân tích từ vựng truy vấn quá chung chung.]

Mặt khác, pg_ * gần với libpq hơn, loại vấn đề này ít có khả năng xảy ra ngay từ đầu và dễ giải quyết hơn nếu có.

Vì vậy, quan điểm của tôi là không phải mọi thứ đều tốt đẹp với PDO. Về mặt nội bộ, nó chắc chắn thách thức hơn pg_ * và phức tạp hơn đồng nghĩa với nhiều lỗi hơn. Những lỗi này có được giải quyết không? Không nhất thiết phải dựa trên các mục nhập trình theo dõi lỗi nhất định.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Số hàng tối đa (có thể sử dụng) trong bảng Postgresql

  2. PostgreSQL - Đổi tên cơ sở dữ liệu

  3. danh sách lược đồ với các kích thước (tương đối và tuyệt đối) trong cơ sở dữ liệu PostgreSQL

  4. Gọi một hàm trả về tập hợp với một đối số mảng nhiều lần

  5. Làm cách nào để xóa một số hàng cố định với sắp xếp trong PostgreSQL?