Hauptmenü

Untermenü

PDO - Methoden - Die PDO-Klasse

1. Wenn man sich

... Prepared Statements, Transaktionen und die Fehlerbehandlung vorerst wegdenkt, so bleiben für den "normalen" Datenbankzugriff weniger als eine Handvoll von Methoden übrig, mit denen man vernünftig arbeiten kann. Konzentrieren wir uns zunächst auf die Einfachen.

2. exec

Führt eine Abfrage aus und gibt die Anzahl der betroffenen Datensätze zurück. Diese Methode ist der Ersatz für die sonst übliche Eigenschaft affected_rows und sollte für INSERT-, UPDATE-, REPLACE- oder DELETE-Anweisungen genutzt werden.


$pdo   = new PDO (...);
$query 'DELETE FROM blubb WHERE ID > 10';
$num   $pdo -> exec($query);

3. getAvailableDrivers

Liefert ein Array aller unterstützten Datenbanktypen.


$pdo   = new PDO (...);
print_r($pdo -> getAvailableDrivers());

4. quote

Maskiert eine Zeichenkette automatisch mit Hochkommata und verkleinert damit die Gefahr einer SQL-Injection.


$_POST['pw'] = 'bla\' OR \'1=1';
$query 'SELECT 
            * 
          FROM 
            user 
          WHERE
            pw = \''.$pdo -> quote($_POST['pw']).'\';
            

5. setAttribute

Damit können Standardvorgaben geändert werden. Eine komplette Liste findet ihr hier, ich selber stelle nur mal zwei als Beispiel vor. Der eigentliche Aufbau läuft nach dem Schema [Attribut], [Wert] ab.

Standard-Fetch-Modus

Will man den also allgemein festlegen, so geht man zum Beispiel so vor.


$pdo  = new PDO ($server$user$password);
$pdo -> setAttribute(PDO::ATTR_DEFAULT_FETCH_MODEPDO::FETCH_ASSOC); 

Das entspricht in etwa einem mysql_fetch_assoc. Allerdings gibt es dazu ein paar Feinheiten, auf die ich im nächsten Abschnitt eingehen werde.

Rückgabewerte von Spaltennamen

Ich persönlich halte davon nicht sehr viel, aber wenn zig Entwickler es bei der Benamung besagter Tabellenspalten nicht so genau nehmen (mal komplett groß, mal komplett klein, mal ein Kuddelmuddel), so kann das hier recht hilfreich sein.


$pdo  = new PDO ($server$user$password);
$pdo -> setAttribute(PDO::ATTR_CASEPDO::CASE_NATURAL);

Wichtig

Hier werden wie schon gesagt nur die Rückgabewerte geändert. Auf die eigentlichen Namen in der Datenbank hat das keinen Einfluss. Wenn man also nicht weiß, ob Spalte X nun bla, Bla oder BLA heißt, so kann man mit obiger Angabe sicher sein, dass der Wert im Array als Index immer ein BLA hat.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt