
Al igual que con la extensión MySQLi, en PDO tienes varias posibilidades para tratar con el conjunto de resultados devuelto por el método query
. La más utilizada es el método fetch
de la clase PDOStatement
. Este método devuelve un registro del conjunto de resultados, o false
si ya no quedan registros por recorrer.
. . .
$conProyecto = new PDO(". . .");
$resultado = $conProyecto->query("SELECT producto, unidades FROM stocks");
while ($registro = $resultado->fetch()) {
echo "Producto ".$registro['producto'].": ".$registro['unidades']."<br />";
}
Por defecto, el método fetch
genera y devuelve a partir de cada registro un array con claves numéricas y asociativas. Para cambiar su comportamiento, admite un parámetro opcional que puede tomar uno de los siguientes valores:
PDO::FETCH_ASSOC
. Devuelve solo un array asociativo.PDO::FETCH_NUM
. Devuelve solo un array con claves numéricas.PDO::FETCH_BOTH
. Devuelve un array con claves numéricas y asociativas. Es el comportamiento por defecto.PDO::FETCH_OBJ
. Devuelve un objeto cuyas propiedades se corresponden con los campos del registro.. . . $conProyecto = new PDO(". . ."); $resultado = $conProyecto->query("SELECT producto, unidades FROM stocks"); while ($registro = $resultado->fetch(PDO::FETCH_OBJ)) { echo "Producto ".$registro->producto.": ".$registro->unidades."<br />"; }
PDO::FETCH_LAZY
. Devuelve tanto el objeto como el array con clave dual anterior.PDO::FETCH_BOUND
. Devuelve true y asigna los valores del registro a variables, según se indique con el métodobindColumn
. Este método debe ser llamado una vez por cada columna, indicando en cada llamada el número de columna (empezando en 1) y la variable a asignar.. . . $conProyecto = new PDO(". . ."); $resultado = $conProyecto->query("SELECT producto, unidades FROM stocks"); $resultado->bindColumn(1, $producto); $resultado->bindColumn(2, $unidades); while ($registro = $resultado->fetch(PDO::FETCH_OBJ)) { echo "Producto ".$producto.": ".$unidades."<br />"; }
También podemos utilizar fecthAll()
que te trae todos los datos de golpe, sin abrir ningún puntero, almacenándolos en un array. Se recomienda cuando no se esperan demasiados resultados, que podrían provocar problemas de memoria al querer guardar de golpe en un array muchas filas provenientes de una consulta.
$resultado = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($resultado as $row){
echo $row["nombre"]." ".$row["apellido"];
}