logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

Lavorare con il database in Drupal 7 – Lezione 7 – Elaborazione dei risultati di una query (fetch)

14/10/2025, by Ivan

Una query di selezione restituirà sempre un risultato che può contenere da 0 a più record. Esistono diversi modi per elaborare i dati restituiti, e puoi scegliere quello più adatto alle tue esigenze.

Il metodo più comune per elaborare i risultati è utilizzare un ciclo foreach():

<?php
$result = db_query("SELECT nid, title FROM {node}");
foreach ($result as $record) {
  // Esegui un’azione su ogni record
  $node = node_load($record->nid);
}
?>

A seconda di ciò che devi fare con i risultati, puoi anche utilizzare altri metodi di elaborazione dei record. Per ottenere esplicitamente i record uno per volta, usa:

<?php
$record = $result->fetch();           // Usa l’elaborazione predefinita (oggetto).
$record = $result->fetchObject();     // Restituisce i record come oggetti.
$record = $result->fetchAssoc();      // Restituisce i record come array associativi.
?>

Quando non ci sono più record disponibili, questi metodi restituiscono FALSE. È preferibile usare fetchObject() o fetchAssoc() anziché fetch(), poiché rendono più chiaro il formato in cui i dati verranno restituiti. È anche possibile cambiare il modo in cui fetch() elabora i risultati, definendo una modalità predefinita.

Per recuperare un singolo campo da un record, utilizza:

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

Il valore predefinito di $column_index è 0. Per contare il numero di righe restituite dalla query, usa:

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

Per ottenere tutti i record in un singolo array, puoi usare uno dei seguenti metodi:

<?php
// Restituisce il risultato come array di oggetti.
$result->fetchAll();

// Restituisce un array associativo con il nome del campo come chiave e il valore come dato.
$result->fetchAllAssoc($field);

// Restituisce un array associativo in cui la prima colonna è la chiave e la seconda il valore.
$result->fetchAllKeyed();
$result->fetchAllKeyed(0,2); // L’array sarà: Colonna 0 => Colonna 2
$result->fetchAllKeyed(1,0); // L’array sarà: Colonna 1 => Colonna 0

// Restituisce una singola colonna come array semplice.
$result->fetchCol();
// Conta il numero di record per la colonna specificata (per impostazione predefinita la prima colonna).
$result->fetchCol($column_index);
?>

Nota che fetchAll() e fetchAllAssoc() usano la modalità di recupero (fetch mode) predefinita, ma è possibile specificarla manualmente passando una costante di modalità di fetch. Per fetchAll() sarà il primo parametro, mentre per fetchAllAssoc() sarà il secondo.

Poiché PHP supporta i metodi concatenati per gli oggetti restituiti, è possibile omettere completamente la variabile $result:

<?php
// Ottenere un array associativo nid => title
$nodes = db_query("SELECT nid, title FROM {node}")->fetchAllKeyed();

// Ottenere un singolo record come oggetto
$node = db_query("SELECT * FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchObject();

// Ottenere un singolo valore dal database
$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField();
?>