PDOStatement::fetchAll

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::fetchAllRuft die verbleibenden Zeilen aus einer Ergebnismenge ab

Beschreibung

public PDOStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_COLUMN, int $column): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_CLASS, string $class, ?array $constructorArgs): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_FUNC, callable $callback): array

Parameter-Liste

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 verwendet werden. Die gewünschte Spalte kann mit dem Parameter column angegeben werden.

Um das resultierende Array mit dem Wert einer bestimmten Spalte zu indizieren (anstatt mit fortlaufenden Zahlen), muss der Name dieser Spalte in SQL an erster Stelle der Liste der Spalten stehen und PDO::FETCH_UNIQUE verwendet werden. Diese Spalte darf nur eindeutige Werte enthalten, da sonst einige Daten verloren gehen.

Um die Ergebnisse in Form eines dreidimensionalen Arrays zu gruppieren, das durch die Werte einer bestimmten Spalte indiziert ist, muss der Name dieser Spalte in SQL an erster Stelle der Liste der Spalten stehen und PDO::FETCH_GROUP verwendet werden.

Um Ergebnisse in Form eines 2-dimensionalen Arrays zu gruppieren, muss die bitweise ODER-Verknüpfung von PDO::FETCH_GROUP und PDO::FETCH_COLUMN verwendet werden. Die Ergebnisse werden nach der ersten Spalte gruppiert, wobei der Wert des Array-Elements ein Listen-Array mit den entsprechenden Einträgen der zweiten Spalte ist.

Bei den folgenden Parametern handelt es sich um dynamische Parameter, die vom Abrufmodus abhängig sind. Sie können nicht in Verbindung mit benannten Parametern verwendet 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.

Rückgabewerte

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.

Fehler/Exceptions

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.

Changelog

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.

Beispiele

Beispiel #1 Abrufen der restlichen Zeilen einer Ergebnismenge

<?php
$sth
= $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Abrufen der restlichen Zeilen der Ergebnismenge */
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();

/* Abrufen aller Werte der ersten Spalte */
$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();

/* Gruppieren der Werte nach der ersten Spalte */
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"
}

Siehe auch