PHP - Bucle while

 
Vista:
Imágen de perfil de Lucas
Val: 136
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Bucle while

Publicado por Lucas (46 intervenciones) el 07/05/2020 00:51:44
Hola, esta es una pregunta que seguro me responderán con facilidad. Llevo un tiempo aprendiendo php y jamas me cerró el hecho de este código que vengo usando tantas veces:
1
2
3
while($fila=$consulta->fetch(PDO::FETCH_ASSOC)){
    $this->personas[]=$fila;
}
Funciona perfectamente, pero más allá de eso me gustaría entender el concepto en profundidad.
¿Que quiere decir exactamente el parámetro que le estoy pasando?
1
while($fila=$consulta->fetch(PDO::FETCH_ASSOC)){
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Annonymous
Val: 89
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Bucle while

Publicado por Annonymous (18 intervenciones) el 07/05/2020 03:23:04
Buenas! ante de la duda siempre podes consultar la web de PHP ahi esta toda la documentacion.
El metodo fetch recibe como parametro un entero que es el "estilo" de como queres que devuelva la consulta, uno de esos estilos es el FETCH_ASSOC que estas usando (existen otros). Esta en mayuscula porque es una constante.

Paso a citar la documentacion de php

PDO::FETCH_ASSOC: devuelve un array indexado por los nombres de las columnas del conjunto de resultados.

Basicamente lo que dice es que te devuelve el resultado de la consulta como un arreglo asociativo.

Tenes otros tipos de "estilos" los cuales podes consultar aca : https://www.php.net/manual/es/pdostatement.fetch.php

Generalmente fetch se usa dentro de un bucle (while, foreach), porque en cierto sentido este método lo que hace es colocar un puntero en los resultados obtenidos, empezando por el primer registro, para luego ir recorriendo fila por fila.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Lucas
Val: 136
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Bucle while

Publicado por Lucas (46 intervenciones) el 07/05/2020 10:49:00
Claro, pero lo que no me cierra era, ¿Los parámetros que recibe While no tienen que ser condiciones? Porque en este caso no le estoy pasando una condición por lo que entiendo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.991
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Bucle while

Publicado por Julio (830 intervenciones) el 07/05/2020 11:09:23
Hola.

Sí le estás pasando una condición. Simplemente necesitas saber exactamente qué hace el método fetch en ese caso. Si te vas al manual de PHP te dice que ese método "Obtiene la siguiente fila de un conjunto de resultados", así que ahí te puedes hacer una idea. Cada vez que pase por la condición del while vas a obtener la siguiente fila del conjunto de resultados, así pues, cuando ya no hayan más filas se devolverá un valor falso (ya no hay más filas) y el while no se ejecutará. Puedes verlo más fácil si haces algo así:

1
2
3
4
5
6
7
8
9
10
11
$sql = $connection->prepare('SELECT * FROM users');
$sql->execute();
 
$result = $sql->fetch(PDO::FETCH_ASSOC);
var_dump($result);
$result = $sql->fetch(PDO::FETCH_ASSOC);
var_dump($result);
$result = $sql->fetch(PDO::FETCH_ASSOC);
var_dump($result);
$result = $sql->fetch(PDO::FETCH_ASSOC);
var_dump($result);

Tengo una conexión a una base de datos con una tabla de usuarios. En esa tabla tengo exactamente 3 usuarios, así que hago un SELECT y lo ejecuto, con lo que tendré esos tres usuarios. Cuando hago el fetch sin estar dentro del while y lo imprimo por pantalla, veo que me devuelve al primer usuario. Cuando lo vuelvo a hacer, veo que me devuelve el segundo usuario. Si lo hago de nuevo veo que me devuelve el tercer usuario. Pero si lo hago una vez más me devuelve false, pues no hay más usuarios.

Al meter esa expresión ($sql->fetch(PDO::FETCH_ASSOC)) dentro del while, en cada iteración del while estás haciendo una llamada a fetch, devolviéndote la siguiente fila de entre las que ha encontrado. Cuando no encuentre ninguna más, devolverá false y el while, con el valor false, no se va a ejecutar.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Lucas
Val: 136
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Bucle while

Publicado por Lucas (46 intervenciones) el 07/05/2020 15:47:37
Excelente explicación! Te agradezco!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar