logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaring❗

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

❗Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll

Werken met de database in Drupal 7 – les 7 – Het verwerken van queryresultaten (fetch)

14/10/2025, by Ivan

Een SELECT-query retourneert altijd een resultaat met nul of meer records. Er zijn verschillende manieren om de resultaten van een query te verwerken, afhankelijk van wat je ermee wilt doen.

De meest gebruikelijke manier is door middel van een foreach()-lus:

<?php
$result = db_query("SELECT nid, title FROM {node}");
foreach ($result as $record) {
  // doe iets met elk $record
  $node = node_load($record->nid);
}
?>

Afhankelijk van wat je met het resultaat wilt doen, kun je ook andere methoden gebruiken om de records te verwerken. Voor expliciete verwerking van afzonderlijke records gebruik je:

<?php
$record = $result->fetch();          // Standaard verwerking (als object).
$record = $result->fetchObject();    // Verwerkt als object.
$record = $result->fetchAssoc();     // Verwerkt als associatieve array.
?>

Wanneer er geen records meer zijn, retourneert de functie FALSE. In plaats van de generieke fetch() wordt aanbevolen om fetchObject() of fetchAssoc() te gebruiken, omdat ze duidelijker aangeven in welke vorm de data wordt teruggegeven. Je kunt ook instellen hoe fetch() standaard de gegevens moet verwerken. Om slechts één veld van een record op te halen, gebruik je:

<?php
$record = $result->fetchField($column_index);
?>

De standaardwaarde voor $column_index is 0. Om het aantal rijen in het resultaat te tellen, gebruik je:

<?php
$number_of_rows = $result->rowCount();
?>

Om alle records in één array op te halen, kun je de volgende methoden gebruiken:

<?php
// Retourneert het resultaat als een array van objecten.
$result->fetchAll();

// Retourneert het resultaat als een associatieve array met de veldnaam als sleutel en het record als waarde.
$result->fetchAllAssoc($field);

// Retourneert het resultaat als een associatieve array waarin kolom 1 => kolom 2 is.
$result->fetchAllKeyed();
$result->fetchAllKeyed(0, 2); // Array wordt kolom 0 => kolom 2
$result->fetchAllKeyed(1, 0); // Array wordt kolom 1 => kolom 0

// Retourneert één kolom als een eenvoudige array.
$result->fetchCol();
// Telt het aantal records voor de opgegeven kolom (standaard de eerste kolom).
$result->fetchCol($column_index);
?>

Let op: fetchAll() en fetchAllAssoc() gebruiken standaard de ingestelde fetch-modus. Deze kan worden gewijzigd door een fetchmode-constante door te geven. Voor fetchAll() is dit de eerste parameter, voor fetchAllAssoc() de tweede.

Aangezien PHP method chaining ondersteunt voor objecten, kun je de variabele $result ook volledig weglaten:

<?php
// Haal een associatieve array op met nid en title
$nodes = db_query("SELECT nid, title FROM {node}")->fetchAllKeyed();

// Haal één record op uit de database
$node = db_query("SELECT * FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchObject();

// Haal één waarde op uit de database
$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField();
?>