Unabhängige Daten mit PHP und PDO

Teil 2: Datenbankabstraktion

2.2.2009 von Redaktion pcmagazin und Tobias Hauser

ca. 3:10 Min
Ratgeber
  1. Datenbankabstraktion
  2. Teil 2: Datenbankabstraktion
  3. Teil 3: Datenbankabstraktion

Anschließend geht es an die erste Abfrage. Zentral ist die Klasse PDO. Sie müssen ein Objekt der Klasse erstellen. Im Objekt übergeben Sie vier Parameter, die Datenbank, Nutzername und Passwort sowie die Konfigurationseinstellungen. Verpflichtend ist nur der erste Parameter. Für das erste Erstellen ist der Konstruktor zuständig (__construct). Für das Anlegen einer Verbindung bietet sich ein try-catch-Konstrukt an, um eventuelle Fehler abzufangen. Die PDO besitzen eine PDOException, die die entsprechende Fehlerausgabe enthält.

$connect = null;
try { $connect = new PDO('mysql:host=
localhost;dbname=internetmagazin,'user', 'password');}
catch (PDOException $error) {
echo 'Ein Fehler trat auf: ' .
$error->getMessage(); }

Ob die Verbindung geklappt hat, können Sie einfach testen, indem Sie das Objekt ausgeben. Es muss sich dabei um ein PDO-Objekt handeln, das noch nichts enthält.

var_dump($connect);

Sollte die Verbindung geklappt haben, können Sie sie jederzeit wieder kappen, indem Sie das PDO-Objekt auf den Wert null zurücksetzen. Dass die Datenbankverbindung abgebaut wird, erledigt der Destruktor.

$connect = null;

Abfrage

Die PDO-Klasse dient zum Aufbau der Verbindung und zum Starten von Abfragen. Daneben gibt es noch eine zweite Klasse, die bei der Abfrage von Bedeutung ist: die Klasse PDOStatement. Sie verarbeitet die Rückgabe und erlaubt mit Ihren Methoden, Inhalte aus der Rückgabe zu extrahieren:

<?php
$connect = null;
try {
$connect = new PDO('mysql:host=
localhost;dbname=internetmagazin','user', 'password');
} catch (PDOException $error) {
echo 'Ein Fehler trat auf: ' .
$error->getMessage(); }
try { $pdostatement = $connect->query
('SELECT id, inhalt, autoren_id FROM artikel');
echo '<pre>';
while ($data = $pdostatement->
fetch()) { var_dump($data);
echo '<br />'; }
echo '</pre>';
} catch (PDOException $error
Statement) {
echo 'Ein Fehler bei der Abfrage
trat auf:' . $errorStatement->getMessage();}
$connect = null;
?>

Hier wird eine einfache SQL-Abfrage per query ausgeführt. Die Rückgabe ist ein PDOStatement, wenn alles klappt. Wenn nicht, liefert die Methode query() den Wert false zurück. Dies könnten Sie noch separat abfangen, der Beispielcode verarbeitet diese Rückgabe nicht.Kommt ein korrektes Ergebnis an, wird dies dann mit der Methode fetch() zeilenweise ausgelesen. Zurückgeliefert wird ein Array mit jeder einzelnen Datenzeile. Den können Sie nun einfach wie auch von anderen Datenbankerweiterungen gewohnt weiterverarbeiten. Hier begnügen wir uns mit einer einfachen var_dump()-Ausgabe.

Datenbankabstraktion mit PHP und PDO
Für PHP 5.0 sind die PDO über PECL verfügbar.
© Archiv

Beim Beispiel handelt es sich um eine Leseoperation. Aber auch fürs Schreiben oder Löschen funktioniert die Verarbeitung analog. Zu dieser einfachen Form gibt es einige Alternativen. Wollen Sie eine Abfrage mehrfach verwenden, setzen Sie die Methode prepare() ein.

$pdostatement = $connect->
prepare('SELECT id, inhalt, autoren_id FROM artikel WHERE autoren_id = 1');

Auch diese Methode liefert ein PDOStatement- Objekt. Allerdings wird die Abfrage noch nicht ausgeführt. Dazu müssen Sie sie erst separat mit der execute()-Methode des PDOStatement-Objekts ausführen.

$pdostatement->execute();

Diese Variante ist eine der nützlichsten Datenbankfunktionalitäten überhaupt, Prepared Statements. Die Vorbereitung hilft allerdings hauptsächlich dann, wenn Sie für Parameter Platzhalter definieren. Nativ unterstützen das nicht alle Datenbanksysteme. Deswegen implementiert das die PDO direkt im Datenbanktreiber - und zwar als einzige Funktion. Die Syntax in der Schnittstelle ist denkbar einfach. Anstelle des Wertes fügen Sie in eine Abfrage einfach einen Platzhalternamen ein, der mit einem Doppelpunkt beginnt.

$pdostatement = $connect->
prepare('SELECT id, inhalt, autoren_id FROM artikel WHERE autoren_id = :autorenid');

Vor dem Aufruf erfolgt dann noch die Bindung an diesen Parameter. Dafür ist die Methode bindParam() zuständig. Sie erhält als ersten Wert den Platzhalternamen des Parameters, als zweiten dann den entsprechenden Wert.

$pdostatement->bindParam
(':autorenid', $autorenid);
$pdostatement->execute();

Hier das vollständige Listing:

<?php
$connect = null;
try { $connect = new
PDO('mysql:host=localhost;dbname=internetmagazin','user', 'password');}
catch (PDOException $error)
{ echo 'Ein Fehler trat auf: ' . $error->getMessage(); }
$autorenid = 1;
try { $pdostatement =
$connect->prepare('SELECTid, inhalt, autoren_id FROM artikel WHERE autoren_id = :autorenid');
$pdostatement->
bindParam(':autorenid', $autorenid);
$pdostatement->execute();
echo '<pre>';
while ($data =
$pdostatement->fetch())
{ var_dump($data); echo '<br />'; } echo '</pre>'; }
catch (PDOException
$errorStatement){
echo 'Ein Fehler bei der Abfrage
trat auf:' . $errorStatement->getMessage(); }
$connect = null;
?>

Eine Alternative zum benannten Platzhalter ist der Platzhalter mit ?. Dabei ist die Reihenfolge der Parameter entscheidend:

$pdostatement = $connect->
prepare('SELECT id, inhalt, autoren_id FROM artikel WHERE autoren_id = ? ');

Mehr lesen

Chronologische Liste und Netflix-Links

Marvel-Filme- und -Serien: Das ist die richtige Reihenfolge

Neuerscheinungen in der Übersicht

Netflix: Neue Filme und Serien

Vorschau auf Film- und Serien-Highlights

Amazon Prime Video: Neuheiten

Weiter zur Startseite  

Mehr zum Thema

internet, webdesign, adobe,  Illustrator, CS6

Webdesign

Webdesign in Adobe Illustrator CS6

Adobe Illustrator wird im Webdesign immer beliebter. Wie Sie das Tool richtig einsetzen, erfahren Sie hier.

Facebook stellte die neue Suche

Facebook

Facebooks Social Graph Search

Was sind die Implikationen für Unternehmen und Endanwender bei Facebooks neuer Suche Graph Search?

Der BGH erklärt das Internet zur Lebensgrundlage.

Online-Recht

Darauf müssen Sie bei den AGB achten

Allgemeine Geschäftsbedingungen liest sich niemand gerne durch. Sie sind jedoch notwendig und äußerst sinnvoll. Worauf sie achten sollten.

Online-Urheberrecht: Unser Ratgeber bietet Tipps für das Cloud-Recht.

Online-Recht in der Cloud

Wie sieht das Urheberrecht in der Wolke aus?

Dateien werden immer häufiger in der Cloud bereitgestellt. Rechtlich ist das jedoch durchaus problematisch. Wir klären über das Urheberrecht in der…

Logistik im E-Commerce: Prozesse rund um die Logistik.

E-Commerce-Logistik

Logistik im E-Commerce

Für den Erfolg eines Online-Shops sind zahlreiche Faktoren verantwortlich. Neben Produktvielfalt und Darstellung der Waren gehört auch die Logistik.