Zum Glück ist auch das Datenbank-Handling in PHP 5 gründlich überholt worden. Das alte Handling über die “mysql_*“-Funktionen hat dazu geführt, dass wohl jeder PHP-Entwickler irgendwann einmal einen Wrapper für diese Funktionen geschrieben hat um den eigentlich wichtigen Code zu verkürzen.
Die neuen PHP Data Objects (PDO) ermöglichen einen in PHP integrierten, objektorientierten Zugriff auf die Datenbank. Abgesehen vom Geschwindigkeitsvorteil bringen PDOs auch lange vermisste Funktionen wie echte Transaktionen, „prepared statements“ und persistente Verbindungen mit sich.
Um die Funktionalität von PDOs zu demonstrieren, versuchen wir einmal denselben Vorgang mit und ohne PDO auszuführen:
Der „klassische“ Ablauf um Daten aus der MySQL-Datenbank zu ziehen läuft in etwa so ab:
mysql_connect eine Verbindung zum MySQL-Server aufbauenmysql_query übergibtmysql_fetch_assoc (oder eine ähnliche Funktion) Daten aus der Datenbank ziehen, bis die Funktion keine Daten mehr zurückgibtIn PHP sieht dies zum Beispiel so aus:
<?php $connection = mysql_connect('localhost', 'root', ''); if (!$connection) { echo "Datenbankfehler: Die Daten konnten nicht gelesen werden."; } else { mysql_select_db('test001', $connection); $query = mysql_query('SELECT * FROM `guestbook`;', $connection); while ($entry = mysql_fetch_assoc($query)) { echo '<div class="name">'.$entry['name'].' schrieb:</div>'; echo '<div class="text">'.$entry['text'].'</div>'; echo '<hr />'; } }
PDO erleichtert die Arbeit mit der Datenbank deutlich. Der Ablauf verkürzt sich auf die Schritte:
query-Methode des Verbindungs-Objekts übergeben und über die Ergebnisse iterierenIn PHP sieht dies zum Beispiel so aus:
<?php try { $connection = new PDO('mysql:host=localhost;dbname=test001', 'root', ''); foreach ($connection->query('SELECT * FROM `guestbook`;') as $entry) { echo '<div class="name">'.$entry['name'].' schrieb:</div>'; echo '<div class="text">'.$entry['text'].'</div>'; echo '<hr />'; } } catch (PDOException $e) { echo "Datenbankfehler: Die Daten konnten nicht gelesen werden."; }
Diese erste Einführung soll vor allem verdeutlichen, dass die neuen PDO-Funktionen auf der einen Seite einfacher zu benutzen sind als die bekannten mysql_*-Funktionen und auf der anderen Seite zu deutlich eleganterem und kürzerem Code führen. In den folgenden Teilen soll es dann um die neuen Features gehen, die mit den „alten“ Funktionen nicht möglich waren.
Weitere Informationen finden sich wie gehabt auf php.net.