Zum Inhalt springen

PHP: PDO Einführung

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()

Ein Kommentar

  1. Andreas Andreas

    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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert