Hauptmenü

Untermenü

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_COLUMN1);

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_COLUMN2);

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