Tach!
[PDO ist nicht das Non-plus-Ultra]
diese Antwort hat mich jetzt überrascht, da die Seiten, die ich bisher zu diesem Thema besucht habe, bei der Entscheidung zwischen mysqli und PDO eindeutig Richtung BDO blicken. Sehr interessant zB. die Artikel "PDO vs. MySQLi: Which Should You Use?"
In dem Artikel sehe ich überhaupt nicht PDO als ganz klaren Sieger. Der dort dargestellte einzige Trumpf von PDO ist seine Unterstützung von 12 Treibern. - Ja und? Brauchst du so viele? Wirst du jemals ein anderes DBMS verwenden? Und wenn doch, wie hoch sind die Kosten des Umstiegs? Zunächst sind sie deutlich höher als es auf den ersten Blick scheint, denn mit dem Austauschen des Connection-String allein ist es meistens nicht getan. Da müssen mindestens noch die Eigenheiten der SQL-Dialakte beachtet werden.
oder auch "MySQLi vs. PDO Benchmarks".
Schau dir mal die Unterschiede an. Sie sind so gering, dass sie in der Praxis keine Rolle spielen. Performance ist hier kaum als Entscheidungskriterium brauchbar.
Und beim Lesen fand ich dauernd nur Kommentare von begeisterten Anwendern und niemanden, der geschrieben hat, dass er sich nach dem Vergleich von mysqli und PDO für Ersteres entscheidet. Ich habe deshalb jetzt mit einem positiveren Kommentar gerechnet. Ich selbst habe natürlich keine Meinung dazu, nachdem ich gestern um diese Zeit von PDO noch nicht mal was gewusst habe.
Ich sehe als Hauptpunkt für eine Entscheidung zwischen beiden Systemen die Handhabbarkeit und die persönliche Einschätzung, welche von beiden einem besser gefällt.
Einige Dinge, wie auto_increment vs. Sequenzen, können einfach nicht vereinheitlicht werden, weil die Konzepte der DBMSe zu unterschiedlich sind.
Da weiß ich nicht genau, was Du konkret meinst und ob mich das bei den Dingen, die ich bisher mit mysqli gemacht habe, betrifft.
Du kennst aus MySQL das auto_increment-Attribut für das Primärindex-Feld, das beim Einfügen von Datensätzen selbständig einen hochgezählten Wert einfügt, den du nachher abfragen kannst. Dieses Feature ist anderen DBMSen nicht bekannt. Einige verfügen stattdessen über ein deutlich flexibleres Feature namens Sequenzen. Das ist eine separate Zählung, die auch in anderen Schritten als +1 definiert werden kann. Andererseits muss sie zu Fuß abgefragt und den Wert dem jeweiligen Feld zugewiesen werden. Dafür kann man sie oder mehrere davon in allen möglichen Feldern und auch ganz anderen Situationen verwenden, nicht nur beim Primärindex. Nichtsdestotrotz ist auto_increment oftmals völlig ausreichend und so schön einfach zu handhaben - einmal Attribut setzen und dann nur noch abfragen.
PDO versucht hier etwas zu vereinheitlichen, indem es die Sequenzabfrage in der FUnktion lastInsertId() versteckt, was nicht ganz gelingt, weil man den Namen der Sequenz angeben muss.
Die Zeitzonen-Festlegung bei der Verbindung mit PDO geschieht mit einem $DBH->exec("SET time_zone = '-8:00'"); ... was ich leider nirgends finde ist das Korrelat zu $db->set_charset('utf8'); nach dem Verbindungsaufbau mit mysqli.
Das sind halt individuelle Dinge, die man nicht oder nur schwer vereinheitlichen kann. Andere Funktionalität kann man nachbilden. Du kennst ja von MySQL auch Timestamp-Felder, die sich selbständig updaten. Das kann man zumindest mit Triggern in anderen Systemen nachbauen. Solche Kriterien sind aber bei der Wahl des DBMS ausschlaggebend, und weniger interessant für die Einscheidung welche API man für ein einziges DBMS verwenden möchte. Hier musst du in erster Linie schauen, wie die exotischen Features (bei denen man sich gleich gar nicht mehr erinnert, wo man überall welche eingesetzt hat) unterstützt werden.
Weiß jemand, wie ich mit PDO der MySQL DB mitteilen kann, dass das Datenhandling utf-8-kodiert geschieht?
Ja, im DSN, aber erst seit PHP 5.3.6. Die DSN-Beschreibung findest du im PHP-Handbuch (meist ganz unten verlinkt) im Kapitel zum jeweiligen PDO-Datenbanktreiber.
dedlfix.