Arbeiten mit der Datenbank in Drupal 7 – Lektion 7 – Verarbeitung von Abfrageergebnissen (fetch)
Eine Abfrage zur Auswahl gibt immer das Ergebnis der Abfrageverarbeitung zurück, das 0 oder mehr Datensätze enthält. Es gibt mehrere Möglichkeiten, die Ergebnisse der Abfrage zu verarbeiten, die Sie nach Belieben verwenden können.
Am häufigsten werden die Ergebnisse in einer foreach()-Schleife verwendet.
<?php $result = db_query("SELECT nid, title FROM {node}"); foreach ($result as $record) { // mache etwas mit jedem $record $node = node_load($record->nid); } ?>
Abhängig davon, was mit dem Ergebnis gemacht werden soll, können Sie auch andere Methoden zur Verarbeitung der Datensätze verwenden. Für eine explizite Verarbeitung einzelner Datensätze verwenden Sie:
<?php $record = $result->fetch(); // Standardverarbeitung (Objekt). $record = $result->fetchObject(); // Verarbeitung als Objekt. $record = $result->fetchAssoc(); // Verarbeitung als assoziatives Array. ?>
Wenn keine weiteren Datensätze vorhanden sind, wird FALSE zurückgegeben. Statt des normalen fetch() sollten Sie fetchObject() und fetchAssoc() verwenden, da diese klarer darstellen, wie die Datensätze verarbeitet werden. Sie können auch das Standardverhalten von fetch() umstellen. Für die Verarbeitung eines einzelnen Datensatzes nutzen Sie:
<?php $record = $result->fetchField($column_index); ?>
Der Standardwert für $column_index ist 0. Um die Anzahl der Zeilen im Ergebnis zu zählen, verwenden Sie:
<?php $number_of_rows = $result->rowCount(); ?>
Um alle Datensätze in einem Array zu verarbeiten, verwenden Sie:
<?php // Liefert das Ergebnis als assoziatives Array von Objekten. $result->fetchAll(); // Liefert das Ergebnis als assoziatives Array mit Feldnamen als Schlüssel und Wert als Ergebnis. $result->fetchAllAssoc($field); // Liefert die zweite Spalte als assoziatives Array: Feld 1 => Feld 2 $result->fetchAllKeyed(); $result->fetchAllKeyed(0, 2); // Array: Feld 0 => Feld 2 $result->fetchAllKeyed(1, 0); // Array: Feld 1 => Feld 0 // Liefert einen einzelnen Datensatz als einfaches Array. $result->fetchCol(); // Zählt die Anzahl der Datensätze für die Standardspalte (Standard ist die erste Spalte) $result->fetchCol($column_index); ?>
Beachten Sie, dass fetchAll() und fetchAllAssoc() standardmäßig verwendet werden, wenn fetch entsprechend konfiguriert wurde. Dies kann über die Übergabe einer neuen Fetch-Modus-Konstante eingestellt werden. Für fetchAll() ist dies der erste Parameter, für fetchAllAssoc() der zweite Parameter.
Da PHP Methodenketten für zurückgegebene Objekte unterstützt, kann die Variable $result komplett übersprungen werden:
<?php // Erhalte ein assoziatives Array von nid und title $nodes = db_query("SELECT nid, title FROM {node}")->fetchAllKeyed(); // Erhalte einen einzelnen Datensatz aus der DB $node = db_query("SELECT * FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchObject(); // Erhalte einen einzelnen Wert aus der DB $title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField(); ?>