PDO bietet eine schöne Schnittstelle, aber mehr Generizität bedeutet auch mehr Ärger, um mit subtilen Eigenheiten jedes Backends umzugehen. Wenn Sie the bugtracker betrachten, hat es eine Reihe von offenen Problemen, und einige von ihnen sind ernst.
Hier ist eine anekdotische Beweise mit Postgresql: PDO Parser hat Probleme mit Standard_conforming_strings auf ON (das ist jetzt der Standard, wie von PG-9.1). Testfall mit 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"));
Die execute() nicht unerwartet bei der PDO-Schicht mit Database error: SQLSTATE[HY093]: Invalid parameter number: :foo
. Es scheint, dass es nicht möglich ist: foo als Parameter zu identifizieren.
Wenn die Abfrage nach 'ab\'=:foo
ohne eine andere Bedingung stoppt, dann funktioniert es gut. Oder wenn die andere Bedingung keine Zeichenfolge enthält, funktioniert es auch.
Das Problem sieht issue #55335 ähnlich, dass als einen Bug, ganz zu Unrecht meiner Meinung nach nicht entlassen wurde. [Eigentlich habe ich sogar selbst PDO gehackt, um es zu reparieren, aber auf eine Weise, die mit anderen Backends inkompatibel ist, also kein Patch. Ich war beunruhigt, dass der lexikalische Abfrage-Analyzer so generisch war.] Andererseits, pg_ * ist näher an libpq, diese Art von Problem ist weniger wahrscheinlich, in erster Linie zu passieren, und einfacher zu lösen, wenn es tut, auf der anderen Seite, pg_ *.
Also mein Punkt wäre, dass nicht alles mit PDO nett ist. Intern ist es sicherlich eine größere Herausforderung als pg_ * und mehr Komplexität bedeutet mehr Bugs. Werden diese Fehler behoben? Basierend auf bestimmten Bugtracker-Einträgen, nicht unbedingt.
@MorrisonHotel Verzeihung? – shadyyx
Mein Kommentar ist schlecht, nicht Sie :) – MorrisonHotel
PostgreSQL: ** SELECT TO_STRING (...) VON mytable LIMIT 1 OFFSET 1 ** MySQL: ** SELECT DATUM_FORMAT (...) FROM mytable LIMIT 1,1 ** Wie wir sehen, muss ich, selbst wenn ich das PDO benutze, alle Anfragen in die Datenbank schreiben. Also, PDO ist kein Allheilmittel. Ich muss Doctrine, Propel usw. verwenden (ist ausgeschlossen). – MorrisonHotel