PDO - Methoden - Die PDOStatement-Klasse - Daten verarbeiten
1. Parameter
Wenn wir mal diesen fetchColumn
-Blödsinn außer Acht lassen, so kann man das Ergebnis einer fetchIrgendwas
-Methode
über ein paar nützliche Konstanten steuern. Leider gibt es da massig Kombinationsmöglichkeiten. Manche Dinge sind hier erlaubt und da nicht.
Oder es ist anders herum.
Daher solltet ihr euch die Möglichkeiten zur Beeinflussung des Rückgabewertes bei den entsprechenden Methoden genau zu Gemüte führen. Und natürlich auch ein wenig herum spielen, da leider nicht alles ausführlich dokumentiert wurde. Ich selber stelle euch nur ein paar Beispiele vor.
2. Standardmöglichkeiten
FETCH_NUM
Das entspricht einem mysql_fetch_num
der MySQL-Erweiterung. Das Ergebnis ist ein numerisches Array. Diese Konstante kann bei
fetch
und fetchAll
verwendet werden.
$result = $stmt->fetchAll(PDO::FETCH_NUM);
FETCH_ASSOC
Das entspricht einen mysql_fetch_assoc
. Das Ergebnis ist ein Array mit den Spaltennamen der Tabelle als Index. Diese Konstante
kann ebenfalls bei fetch
und fetchAll
verwendet werden.
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
FETCH_BOTH
Das entspricht einen mysql_fetch_array
. Dabei handelt es sich um eine Kombination von FETCH_NUM
sowie
FETCH_ASSOC
. Die unterstützten Methoden sind identisch. Wenn man keinen Parameter angibt und auch nicht mit setAttribute
gearbeitet hat, so ist dies
die Standardvorgabe.
$result = $stmt->fetchAll(PDO::FETCH_BOTH);
FETCH_OBJ
Das entspricht einen mysql_fetch_object
. Das Ergebnis wird als Objekt zurückgegeben,
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
3. Spezielle Fälle
FETCH_COLUMN
Hiermit lässt man sich nur eine Spalte ausgeben. Der zweite Parameter bestimmt die Zahl des Feldes. Diese Konstante kann
bei fetch
und fetchAll
verwendet werden.
$query = 'SELECT bla, blubb, blubber FROM laber';
...
// Holt nur Spalte blubb
$result = $stmt->fetchAll(PDO::FETCH_COLUMN, 1);
FETCH_GROUP
Nimmt die erste Spalte als Index und den Rest als Inhalt.
$query = 'SELECT bla, blubb, blubber FROM laber';
...
// Nimmt bla als Index
$result = $stmt->fetchAll(PDO::FETCH_GROUP);
4. Kombinationen
Auch das ist möglich, allerdings nur recht begrenzt. Dabei werden die einzelnen Konstanten durch ein |
getrennt.
Leider ist die Doku bezüglich der Möglichkeiten nicht sehr auskunftsfreudig, so dass man einfach herumspielen muss. Auch hier
gibt es nur ein paar Beispiele.
FETCH_ASSOC
/FETCH_GROUP
Nimmt die erste Spalte als Index und den Rest als Array mit der Standardvorgabe FETCH_BOTH
. Die Reihenfolge ist egal.
$query = 'SELECT bla, blubb, blubber FROM laber';
...
// Nimmt bla als Index, Rest als alphanumerisches Array
$result = $stmt->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);
FETCH_COLUMN
/FETCH_GROUP
Nimmt den Spaltennamen, der in FETCH_COLUMN
angegeben wurde als Index und dann nur den nächsten darauf folgenden Spaltenwert
$query = 'SELECT bla, blubb, blubber FROM laber';
...
// Nimmt blubber als Index und bla ist der Inhalt
$result = $stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_COLUMN, 2);
Zusammenfassung
Mit der Kombination mehrerer Konstanten könnte man echt tolle Dinge anstellen, wenn es da nicht unzählige Einschränkungen gäbe. So ist man nur auf ein paar mehr oder weniger beschränkte Möglichkeiten begrenzt, die obendrein teilweise sehr sinnfrei sind. Ich hoffe, man arbeitet daran.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt