Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

Trabajar con una base de datos en Drupal 7 - Lección 7 - Procesamiento de resultados de consultas (obtención)

12/05/2025, by Ivan

Una consulta SELECT siempre devolverá un resultado con 0 o más registros. Existen varias formas de procesar los resultados, que puedes utilizar según tus necesidades.

La forma más común de trabajar con los resultados es usando un ciclo foreach():

<?php
$result = db_query("SELECT nid, title FROM {node}");
foreach ($result as $record) {
  // hacer algo con cada $record
  $node = node_load($record->nid);
}
?>

Dependiendo de lo que necesites hacer con los resultados, puedes usar otras formas de recorrer los registros. Para un procesamiento explícito de los registros siguientes, utiliza:

<?php
$record = $result->fetch();          // Usa el modo predeterminado (objeto).
$record = $result->fetchObject();    // Procesa como objeto.
$record = $result->fetchAssoc();     // Procesa como array asociativo.
?>

Si no hay más registros, se devolverá FALSE. Se recomienda usar fetchObject() y fetchAssoc() en lugar de fetch(), ya que explican mejor cómo se procesarán los resultados. También puedes cambiar el modo predeterminado de fetch(). Para obtener un solo campo del resultado:

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

El valor predeterminado de $column_index es 0. Para contar la cantidad de filas devueltas por la consulta:

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

Para procesar todos los registros como un solo array, utiliza:

<?php
// Devuelve el resultado como un array de objetos.
$result->fetchAll();

// Devuelve el resultado como un array asociativo donde la clave es un campo del resultado.
$result->fetchAllAssoc($field);

// Devuelve un array asociativo con los valores de la columna 1 => columna 2.
$result->fetchAllKeyed();
$result->fetchAllKeyed(0,2); // array será columna 0 => columna 2
$result->fetchAllKeyed(1,0); // array será columna 1 => columna 0

// Devuelve un array plano con los valores de una sola columna.
$result->fetchCol();
// También puedes especificar qué columna usar.
$result->fetchCol($column_index);
?>

Ten en cuenta que fetchAll() y fetchAllAssoc() utilizarán por defecto el modo de fetch() si este ha sido configurado previamente. Puedes configurar esto pasando una constante de modo de fetch. Para fetchAll() se pasa como primer parámetro, y para fetchAllAssoc() como segundo.

Dado que PHP permite encadenar métodos para los objetos devueltos, puedes omitir la variable $result por completo:

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

// Obtener un único registro como objeto
$node = db_query("SELECT * FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchObject();

// Obtener un único valor (campo) de la base de datos
$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField();
?>