[php] Pdo

Zweipunktnull

Commander
Registriert
Dez. 2004
Beiträge
2.546
Hallo!

Kann mir einmal jemand erklären, was genau der Unterschied zwischen den unten genannten Methoden zur Ausführung von SQL-Querys ist beziehungsweise wann man welche benutzen sollte?

PHP:
$db = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');
$result = $db->query('SELECT * FROM testtbl');
PHP:
$db = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');
$query = $db->prepare('SELECT * FROM testtbl');
$query->execute();
Und vielleicht kann auch jemand einmal seine Meinung dazu äußern, ob man selbst bei kleineren Skripten PDO einsetzen sollte. Ich bin da eher skeptisch, allerdings hab ich letztens in einem Artikel in der Fachzeitschrift gelesen, dass man ab PHP 5.1 generell alle Datenbankabfragen mit PDO machen sollte. Soll PDO ein Ersatz sein oder nur eine zusätzliche Alternative um auf Datenbanken zuzugreifen?
 
Zuletzt bearbeitet:
Hi,

die beiden genannten Beispiele zeigen leider nicht den wirklichen Vorteil des Zugriffes über ein Prepared Statement. In PDO kann man nämlich ein voll ausformuliertes SQL-Statement in die Preparemethode schicken und danach Platzhalter (entweder '?' oder ':belibiger_string') mit Werten füllen PDOStatement::bindValue() oder besser noch PDOStatement::bindParam() verwenden, um Variablen direkt an den Platzhalter zu binden und das Statement mehrmals auszuführen. Zudem bietet PDO in Verbindung mit den Prepared Statements wohl derzeit den besten Schutz vor SQL-Injections in der PHP-Welt.

Im PHP-Manual sind die Vorteile wirklich sehr anschaulich beschrieben. Schade an PDO ist eigentlich nur, dass es keine echte Datenbankabstraktion bietet, sonst könnte man mit ein und dem selben Quelltext (PHP und SQL) mehrere DBMS unterstützen. So gelingt dies nur bedingt, weil man einige Anfragen für MySQL auf einem Oracle-System zum Beispiel umformulieren müsste. Analog verhält es sich logischerweise mit PostgreSQL oder eben MSSQL. Ein Fortschritt gegenüber den einzelnen Funktionen ist es aber allemal.


Ciao
 
S.Giny schrieb:
[...] Ein Fortschritt gegenüber den einzelnen Funktionen ist es aber allemal.

Also bist du der Meinung, man sollte PDO immer benutzen - auch wenn das Skript noch so klein ist? Wie ist denn die "offizielle" Meinung dazu? Soll PDO die bisherigen Funktionen ablösen (und werden sie gar vielleicht in künfigen Versionen entfernt?) oder ist es nur eine zusätzliche Alternative?
 
Hallo,

nun in unseren Projekten hier in der Firma haben wir das mittlerweile durchgesetzt, auch in Hinblick darauf, dass wir später auch andere DBMS in unserer Software werden unterstützen müssen. Wir hatten bisher 2 selbst entwickelte Datenbankklassen im Einsatz, welche aber beide bei Weitem nie die Sicherheit in Bezug auf SQL-Injections bieten konnten, wie eben die PDO. Die PDO befindet sich im Moment noch in einem recht frühen Entwicklungsstadium, mit jedem PHP-Update kommen Bugfixes und neue Funktionen hinzu, z.B. liefert die PDOStatement::rowCount() seit PHP 5.2.2 nun auch die Anzahl der Zeilen eines SELECT-Statements in MySQL, eine Funktionalität, die von vielen schmerzlich vermisst wurde, wobei sie nicht wirklich notwendig ist.

Auf die Frage, ob man PDO immer einsetzen sollte kann ich nur sagen, dass es für mich persönlich ein Graus ist, wenn verschiedene Systeme für ein und die selbe Aufgabe innerhalb eines Projektes zum Einsatz kommen. Das Problem dabei ist, dass man zumeist am Anfang eines Projektes nicht weiß, welche Ausmaße es am Ende noch annehmen wird. PDO bietet viele Vor- nur wenige Nachteile, also spricht für mich nichts dagegen, auch bei kleineren Projekten sofort auf PDO zu setzen.

Zu deiner letzten Frage kann ich nur sagen, dass aus meiner Erfahrung, das PHP-Team sich schwer tut, Altlasten über Board zu werfen. Ich denke also, dass PDO nur weiterhin eine Alternative sein wird, zumal etliche Funktionen noch nicht fertig implementiert sind. Aber es ist ein guter Schritt in die richtige Richtung und ich würde gerade Anfängern empfehlen, sich direkt mit der PDO auseinanderzusetzen.


Ciao
 
Zurück
Oben