Die PDO Erweiterung ist eine Schnittstelle, um mit PHP auf Datenbanken zuzugreifen. Es ist sozusagen eine Abstraktionsschicht für den Datenzugriff, sodass wir (egal welche Datenbank wir verwenden) die selben Funktionen verwenden können, um Abfragen zu erstellen und die daraus erhaltenen Daten zu verarbeiten.
Das ist auch gleichzeitig der große Vorteil im Vergleich zur Verwendung der mysqli Funktionen. Auch wenn wir heute nur Mysql verwenden möchten, halten wir uns damit die Option offen, z.B. zu PostgreSQL zu wechseln.
Da PDO selbst keine Datenbankverbindung herstellen kann, benötigen wir einen datenbankspezifischen PDO-Treiber, um auf unsere Datenbank zugreifen zu könnnen.
1. PDO: Verbindung herstellen (hier MySQL) durch Instanzieren der PDO Basisklasse:
<?php $mydb = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
2. PDO::query()
$sql = 'select firstname, lastname from person order by lastname'; foreach($mydb->query($sql) as $row) { echo $row["firstname"].' '.$row["lastname"].' '<br />'; }
PDO::query liefert uns ein PDOStatement zurück, welches wir hier praktischerweise mittels foreach zeilenweise abgreifen können.
3. PDO::exec()
$count = $mydb->exec("delete from person where firstname = 'Hans'");
Gibt die Anzahl der betroffenen Zeilen zurück, d.h. für delete, insert und update statements geeignet, logischerweise weniger für select.
4. PDO::prepare() und PDOStatement::execute()
<?php /* Mit ? Parameter */ $sth = $mydb->prepare('select firstname, lastname, gender from person where lastname = ? and gender = ?'); $sth->execute(array('Meyer', 'male')); $male = $sth->fetchAll(); /* Alternativ: Mit benannten Parametern */ $sql = 'select firstname, lastname, gender from person where lastname = :lastname and gender = :gender'; $sth = $mydb->prepare($sql, array(array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->execute(array(':lastname' => 'Meyer', ':gender' => 'male')); $male = $sth->fetchAll();
5. Transaktionen
PDO hat auch ein implementiertes Transaction Handling.
//Deaktiviert autocommit, startet die Transaction PDO::beginTransaction() //Commit changes PDO::commit() //Alle Änderungen verwerfen, autocommit wieder an PDO::rollBack()
Standardmäßig wird mit einem Autocommit Modus gearbeitet.
Damit sind wir durch die Grundzüge soweit schonmal durch. Der grundsätzliche Überblcik ist auch primär der Ziel des Artikels, die Details kann man ja im PHP Manual nachlesen.
Die folgenden Funktionen nur noch kurz angeschnitten:
/* PDOStatement::bindParam() Einen benannten Parameter einer Variable (Referenz) zuweisen (zu prepare() Beispiel)*/ $sth->bindParam(':firstname', $firstname, PDO::PARAM_STR, 12);
/* PDOStatement::bindValue() Analog bindParam(), jedoch keine Referenz, Wert wird gesetzt) */ $sth->bindParam(':firstname', $firstname,PDO::PARAM_STR
); /* Befreit alle Resourcen, die an ein PDOStatement gebunden sind. (Manche DB Treiber lassen kein PDOStatement ausführen, solange ein anderes unfetched rows (fetch()) hat. */ PDOStatement::closeCursor()
Hi,
grundsätzlich gut gemacht und hilfreich. Es könnten allerdings ein paar mehr Erklärungen vorhanden sein. Immerhin heißt es hier „PDO Einführung“. Ich konnte z. B. zunächst mal nichts mit dieser Zeile anfangen
„$sth = $mydb->prepare($sql, array(array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));“
Da wäre eine detailiertere Erklärung schon hilfreich. Es sei denn, Du willst Dich dann eben doch an schon erfahrenere User wenden.
So muss man viel nachlesen und dann braucht man eigentlich diese Einführung hier auch schon nicht mehr.
Gruß Andreas