PDO offre un'interfaccia piacevole ma più genericità significa anche più problemi per gestire le sottili idiosincrasie di ciascun back-end. Se guardi allo the bugtracker, ha un numero di problemi aperti e alcuni sono seri.
Ecco una prova aneddotica con postgresql: il parser di PDO ha problemi con le stringhe standard_conforming impostate su ON (che ora è l'impostazione predefinita, a partire da PG-9.1). caso di prova con 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"));
Il execute() non riesce inaspettatamente a livello PDO con Database error: SQLSTATE[HY093]: Invalid parameter number: :foo
. Sembra che non sia in grado di identificare: foo come parametro.
Se la query si interrompe dopo 'ab\'=:foo
, senza un'altra condizione, quindi funziona correttamente. Oppure se l'altra condizione non include una stringa, funziona anche bene.
Il problema è simile a issue #55335, che è stato respinto come Non è un bug, a torto secondo me. [In realtà, ho persino hackerato PDO per ripararlo, ma in un modo che è incompatibile con altri backend, quindi nessuna patch. Ero sconcertato dal fatto che l'analizzatore lessicale della query fosse così generico.]
D'altra parte, pg_ * essendo più vicino a libpq, questo tipo di problema è meno probabile che accada in primo luogo, e più facile da risolvere se lo fa.
Quindi il mio punto è che non tutto è bello con PDO. Internamente, è sicuramente più difficile di pg_ *, e più complessità significa più bug. Questi bug sono stati risolti? Basato su determinate voci di bugtracker, non necessariamente.
fonte
2012-04-30 19:37:02
@MorrisonHotel Mi perdoni? – shadyyx
Il mio commento è sbagliato, non tu :) – MorrisonHotel
PostgreSQL: ** SELEZIONA TO_STRING (...) FROM mytable LIMIT 1 OFFSET 1 ** MySQL: ** SELEZIONA DATE_FORMAT (...) FROM mytable LIMIT 1,1 ** Come si vede, anche usando il PDO, dovrò riscrivere tutte le richieste al database. Quindi, DOP non è una panacea. Dovrò usare Doctrine, Propel, ecc. (È escluso). – MorrisonHotel