Conjuntos de resultados
Una consulta Select siempre devolverá un objeto conjunto de resultados que contiene cero o más registros. Hay varias maneras de obtener datos de este conjunto de resultados dependiendo del caso de uso. Por defecto, los registros se extraen como objetos, a menos que cambie el modo de extracción (ver: setFetchMode).
El caso más común es iterar sobre el conjunto de resultados usando un ciclo foreach().
// Consulta estática: $result = $connection->query("SELECT field1, field2 FROM {mytable}"); foreach ($result as $record) { // Hacer algo con cada $record } // Consulta dinámica $result = $query->execute(); foreach ($result as $record) { // Hacer algo con cada $record. }
Sin embargo, dependiendo del uso que se le dé a los resultados, existen varias otras formas de obtener registros.
Para obtener explícitamente el siguiente registro, use:
$record = $result->fetch(); // Usa el modo de extracción por defecto. $record = $result->fetchObject(); // Extrae como un objeto stdClass. $record = $result->fetchAssoc(); // Extrae como un arreglo asociativo.
Si no hay un siguiente registro, se devuelve FALSE. Normalmente se recomienda evitar fetch() en favor de fetchObject() y fetchAssoc(), ya que estos últimos son más autodescriptivos. Si necesita usar cualquier otro modo de extracción soportado por PDO, use fetch().
Para obtener solo un campo del conjunto de resultados, use:
$record = $result->fetchField($column_index);
El valor por defecto de $column_index es 0, es decir, el primer campo.
Para contar la cantidad de filas afectadas por una sentencia DELETE, INSERT o UPDATE, use:
$number_of_rows = $result->rowCount();
Para contar la cantidad de filas devueltas por una sentencia SELECT, use:
$number_of_rows = $connection->select('mytable')->countQuery()->execute()->fetchField();
Para extraer todos los registros de una vez en un solo arreglo, use uno de los siguientes:
// Recuperar todos los registros en un arreglo indexado de objetos stdClass. $result->fetchAll(); // Recuperar todos los registros en un arreglo asociativo con claves del campo especificado. $result->fetchAllAssoc($field); // Recuperar un conjunto de resultados de 2 columnas como un arreglo asociativo campo0 => campo1. $result->fetchAllKeyed(); // También puede especificar qué dos campos usar indicando sus números de columna $result->fetchAllKeyed(0,2); // sería campo 0 => campo 2 $result->fetchAllKeyed(1,0); // sería campo 1 => campo 0 // Si necesita un arreglo donde las claves y valores contienen el mismo campo (por ejemplo, para crear un elemento de formulario 'checkboxes'), el siguiente método es perfectamente válido: $result->fetchAllKeyed(0,0); // sería campo 0 => campo 0, por ejemplo [article] => [article] // Recuperar un conjunto de resultados de 1 columna como un arreglo simple. $result->fetchCol(); // Se puede especificar el número de columna, si no se especifica, por defecto es la primera columna $result->fetchCol($column_index);
Tenga en cuenta que fetchAll() y fetchAllAssoc() por defecto extraerán usando cualquier modo de extracción establecido en la consulta (arreglo numérico, arreglo asociativo u objeto). Esto puede cambiarse pasando una nueva constante de modo de extracción. Para fetchAll() es el primer parámetro. Para fetchAllAssoc() es el segundo parámetro. Ejemplos:
// Obtener un arreglo de arreglos con claves basadas en el campo 'id'. $result->fetchAllAssoc('id', PDO::FETCH_ASSOC); // Obtener un arreglo de arreglos con claves numéricas y asociativas. $result->fetchAll(PDO::FETCH_BOTH);
Dado que PHP soporta llamadas en cadena de métodos sobre objetos retornados, a menudo la variable $result se omite completamente, por ejemplo:
// Obtener un arreglo asociativo de ids a títulos. $examples = $connection->query("SELECT id, title FROM {mytable}")->fetchAllKeyed(); // Obtener un solo registro de la base de datos. $myobj = $connection->query("SELECT * FROM {mytable} WHERE example = :example", [':example' => $example])->fetchObject(); // Obtener un solo valor de la base de datos. $myval = $connection->query("SELECT example FROM {mytable} WHERE id = :id", [':id' => $id])->fetchField();
Si necesita un arreglo simple como [1, 2, 3, 4, 5], tendrá que conformarse con algo más parecido a [1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5]. Puede obtener esto con:
$ids = $connection->query("SELECT id FROM {example}")->fetchAllKeyed(0,0);
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.