(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::fetchAll — Ruft die verbleibenden Zeilen aus einer Ergebnismenge ab
mode
Legt die Struktur des zurückgegebenen Arrays fest, wie in PDOStatement::fetch() dokumentiert. Voreingestellt ist PDO::ATTR_DEFAULT_FETCH_MODE
(das standardmäßig auf PDO::FETCH_BOTH
gesetzt ist).
Damit ein Array zurückgegeben wird, das aus allen Werten einer einzelnen Spalte der Ergebnismenge besteht, muss PDO::FETCH_COLUMN
angegeben werden. Die gewünschte Spalte kann mit dem Parameter column
angegeben werden.
Um nur die eindeutigen Werte einer einzelnen Spalte aus der Ergebnismenge zu abzurufen, müssen PDO::FETCH_COLUMN
und PDO::FETCH_UNIQUE
mittels bitweisem OR verknüpft werden.
Damit ein Array zurückgegeben wird, das nach den Werten einer bestimmten Spalte gruppiert ist, müssen PDO::FETCH_COLUMN
und PDO::FETCH_GROUP
mittels bitweisem OR verknüpft werden.
column
Wird zusammen mit PDO::FETCH_COLUMN
verwendet. Gibt die angegebene Spalte zurück (der Index beginnt bei 0).
class
Wird zusammen mit PDO::FETCH_CLASS
verwendet. Gibt Instanzen der angegebenen Klasse zurück, wobei die Spalten jeder Zeile auf benannte Eigenschaften der Klasse abgebildet werden.
constructorArgs
Argumente des benutzerdefinierten Klassenkonstruktors, wenn der Parameter mode
auf PDO::FETCH_CLASS
gesetzt ist.
callback
Wird zusammen mit PDO::FETCH_FUNC
verwendet. Gibt die Ergebnisse des angegebenen Funktionsaufrufs zurück, wobei die Spalten jeder Zeile als Parameter für den Aufruf verwendet werden.
PDOStatement::fetchAll() gibt ein Array zurück, das die restlichen Zeilen der Ergebnismenge enthält. Das Array enthält jede Zeile entweder als Array von Spaltenwerten oder als Objekt mit Eigenschaften, die den einzelnen Spaltennamen entsprechen. Wenn es keine Ergebnisse gibt, die abgerufen werden können, wird ein leeres Array zurückgegeben.
Wenn diese Methode verwendet wird, um große Ergebnismengen abzurufen, kann dies zu einer hohen Beanspruchung der System- und Netzwerkressourcen führen. Anstatt alle Daten abzurufen und in PHP zu bearbeiten, sollte in Betracht gezogen werden, den Datenbankserver für die Bearbeitung der Ergebnismengen zu verwenden. Zum Beispiel könnten WHERE- und ORDER BY-Klauseln in SQL verwendet werden, um die Ergebnismenge einzuschränken, bevor sie mit PHP abgerufen und verarbeitet wird.
Gibt einen Fehler der Stufe E_WARNING
aus, wenn das Attribut PDO::ATTR_ERRMODE
auf PDO::ERRMODE_WARNING
gesetzt ist.
Löst eine PDOException aus, wenn das Attribut PDO::ATTR_ERRMODE
auf PDO::ERRMODE_EXCEPTION
gesetzt ist.
Version | Beschreibung |
---|---|
8.0.0 | Diese Methode gibt nun immer ein Array zurück, während zuvor bei einem Fehler möglicherweise false zurückgegeben wurde. |
Beispiel #1 Abrufen der restlichen Zeilen einer Ergebnismenge
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
print "Abrufen der restlichen Zeilen der Ergebnismenge:\n";
$result = $sth->fetchAll();
print_r($result);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Abrufen der restlichen Zeilen der Ergebnismenge: Array ( [0] => Array ( [name] => apple [0] => apple [colour] => red [1] => red ) [1] => Array ( [name] => pear [0] => pear [colour] => green [1] => green ) [2] => Array ( [name] => watermelon [0] => watermelon [colour] => pink [1] => pink ) )
Beispiel #2 Abrufen aller Werte einer einzelnen Spalte einer Ergebnismenge
Das folgende Beispiel zeigt, wie alle Werte einer einzelnen Spalte aus einer Ergebnismenge abgerufen werden können, auch wenn die SQL-Anweisung selbst mehrere Spalten pro Zeile zurückgibt.
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
var_dump($result);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Array(3) ( [0] => string(5) => apple [1] => string(4) => pear [2] => string(10) => watermelon )
Beispiel #3 Gruppieren aller Werte nach einer einzelnen Spalte
Das folgende Beispiel zeigt, wie ein assoziatives Array abgerufen werden kann, das nach den Werten der angegebenen Spalte in der Ergebnismenge gruppiert ist. Das Array enthält drei Schlüssel: Die Werte apple
und pear
werden als Arrays zurückgegeben, die zwei verschiedene Farben enthalten, während watermelon
als Array zurückgegeben wird, das nur eine Farbe enthält.
<?php
$insert = $dbh->prepare("INSERT INTO fruit(name, colour) VALUES (?, ?)");
$insert->execute(array('apple', 'green'));
$insert->execute(array('pear', 'yellow'));
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
array(3) { ["apple"]=> array(2) { [0]=> string(5) "green" [1]=> string(3) "red" } ["pear"]=> array(2) { [0]=> string(5) "green" [1]=> string(6) "yellow" } ["watermelon"]=> array(1) { [0]=> string(5) "pink" } }
Beispiel #4 Instanziieren einer Klasse für jedes Ergebnis
Das folgende Beispiel zeigt das Verhalten im Modus PDO::FETCH_CLASS
.
<?php
class fruit {
public $name;
public $colour;
}
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");
var_dump($result);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
array(3) { [0]=> object(fruit)#1 (2) { ["name"]=> string(5) "apple" ["colour"]=> string(5) "green" } [1]=> object(fruit)#2 (2) { ["name"]=> string(4) "pear" ["colour"]=> string(6) "yellow" } [2]=> object(fruit)#3 (2) { ["name"]=> string(10) "watermelon" ["colour"]=> string(4) "pink" } [3]=> object(fruit)#4 (2) { ["name"]=> string(5) "apple" ["colour"]=> string(3) "red" } [4]=> object(fruit)#5 (2) { ["name"]=> string(4) "pear" ["colour"]=> string(5) "green" } }
Beispiel #5 Aufrufen einer Funktion für jedes Ergebnis
Das folgende Beispiel zeigt das Verhalten im Modus PDO::FETCH_FUNC
.
<?php
function fruit($name, $colour) {
return "{$name}: {$colour}";
}
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_FUNC, "fruit");
var_dump($result);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
array(3) { [0]=> string(12) "apple: green" [1]=> string(12) "pear: yellow" [2]=> string(16) "watermelon: pink" [3]=> string(10) "apple: red" [4]=> string(11) "pear: green" }