columna - fetchall() php
PDO fetchTodos los pares clave-valor del grupo en matriz assoc (2)
De vez en cuando, me meto en una situación en la que tengo una consulta similar en tipo a:
SELECT `key`, `value` FROM `settings`;
En este caso, quiero obtener una matriz asociativa, usando valores de key
y value
como entradas respectivas de esa matriz, por ejemplo, si la base de datos contiene: (''first_name'', ''Tom''), (''last_name'', ''Jeferson'')
, la matriz debe ser array(''first_name'' => ''Tom'', ''last_name'' => ''Jeferson'');
.
La forma más común de hacer esto es:
$settings_flat = $db
->query("SELECT `name`, `value` FROM `settings`;")
->fetchAll(PDO::FETCH_ASSOC);
$settings = array();
foreach ($settings_flat as $setting) {
$settings[$setting[''name'']] = $setting[''value''];
}
* La otra forma de hacerlo es llamando a fetchAll(PDO::FETCH_COLUMN)
dos veces y luego usando array_combine
para crear la matriz. Sin embargo, como implica dos llamadas dos a la base de datos, dejo esto como una opción.
Hay otra manera de hacer esto?
Para su problema hay una solución bastante lista, es decir:
$q = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$r = $q->fetchAll(PDO::FETCH_KEY_PAIR);
Funciona para mí, en PostgreSQL 9.1 y PHP 5.3.8 corriendo en Windows 7 x64.
$query = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$result = $query->fetchAll(PDO::FETCH_ASSOC);