PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Fungsi PDO vs pg_*

PDO menawarkan antarmuka yang bagus tetapi lebih generik juga berarti lebih banyak masalah untuk menangani keanehan halus dari setiap backend. Jika Anda melihat bugtracker, ada sejumlah masalah terbuka, dan beberapa di antaranya serius.

Berikut adalah bukti anekdotal dengan postgresql:Pengurai PDO bermasalah dengan standard_conforming_strings yang disetel ke ON (yang sekarang menjadi default, pada PG-9.1). Kasus uji dengan 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"));

Eksekusi() tiba-tiba gagal pada lapisan PDO denganDatabase error: SQLSTATE[HY093]: Invalid parameter number: :foo . Tampaknya tidak dapat mengidentifikasi :foo sebagai parameter.

Jika kueri berhenti setelah 'ab\'=:foo , tanpa kondisi lain, maka itu berfungsi dengan baik.Atau jika kondisi lain tidak menyertakan string, itu juga berfungsi dengan baik.

Masalahnya terlihat mirip dengan masalah #55335 , yang diabaikan sebagai Bukan bug , menurut pendapat saya cukup salah.[Sebenarnya, saya bahkan telah meretas PDO sendiri untuk memperbaikinya, tetapi dengan cara yang tidak kompatibel dengan backend lain, jadi tidak ada tambalan. Saya bingung dengan penganalisis leksikal kueri yang begitu umum.]

Di sisi lain, pg_* lebih dekat ke libpq, masalah seperti ini cenderung tidak terjadi, dan lebih mudah dipecahkan jika memang demikian.

Jadi maksud saya adalah tidak semuanya baik dengan PDO. Secara internal, ini tentu lebih menantang daripada pg_*, dan lebih banyak kerumitan berarti lebih banyak bug. Apakah bug ini ditangani? Berdasarkan entri pelacak bug tertentu, belum tentu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hubungkan Aplikasi iPhone ke PostgreSQL Menggunakan Libpq

  2. PostgreSQL 13:Jangan biarkan slot membunuh yang utama

  3. Bagaimana cara menangani membuka/menutup koneksi Db di aplikasi Go?

  4. Menyimpan string biner (data mentah) yang panjang

  5. Memutakhirkan ke PostgreSQL 11 dengan Replikasi Logis