alguien podría explicarme el while y el echo que le procede como funcionan

preguntado por gabixi (160 puntos) Jul 31, 2015
<?php
$user = "root";
$pass = "";
$host = "127.0.0.1";
$dbname = "rally";
try {
  $db = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  $st = $db->query('SELECT * FROM tasks');
  $st->setFetchMode(PDO::FETCH_ASSOC);
  while($row = $st->fetch()) {
    echo $row['id']." - ".$row['task']." <a style=\"color:red\" href=\"delete.php?id=".$row['id']."\">×</a><br/>";
  }
  $db = null;
} catch(PDOException $e) {
    echo $e->getMessage();
    die();
}
?>

1 Respuesta

+1 voto
respondido por osk386 (1,530 puntos) Jul 31, 2015

cuando se hace una consulta a la base de datos desde php, esta retorna un cursor, que es un objeto con todas las filas y campos que se obtuvieron.

El while (mientras que se cumple la condicion) recorre cada fila y devuelve un array de esa fila, de esta manera se puede acceder a los indices.

en tu caso:

while($row = $st->fetch()) {
echo $row['id']." - ".$row['task']." ×<br/>";
}

Mientras que la consulta $st tenga filas, imprima en pantalla la fila evaluada con el indice dado.

Esto se hace multiples veces, una vez por cada fila recogida de la consulta a la base de datos.

comentado por daronwolff (185 puntos) Sep 4, 2015
Excelente respuesta, yo añadiría que :
al momento de hacer
while($row = $st->fetch()) Se está creando un arreglo llamado $row con los valores de los campos, los cuales serán accesible por medio de $row["nombre_del _campo"].
...