mysql_fetch_X (siendo X: row, assoc, object o array) "divide" la variable del resultado convirtiéndola en atributos.
Independientemente de si usas un bucle (sea cual sea, foreach - for - while - do - etc) lo que hace es transformar la variable que se imprimiría como Resource #X (Ya que imprime eso para demostrar que existen datos, pero que no se están mostrando correctamente) a una variable especifica y detallada
ej:
Asumiendo que tenemos una DB con comentarios, y esos comentarios están compuestos de id,nombre,texto por decir algo
y los llamamos con php y los dejamos dentro de un bucle cualquiera (como lo siguiente:)
Código PHP:
$sql = mysql_query("mi sql");
while($resultado = mysql_fetch_assoc($sql)) {
echo 'ID: ' . $resultado['id'] . '<br />';
echo 'Nombre: ' . $resultado['nombre'] . '<br />';
echo 'Texto: ' . $resultado['texto'] . '<br />';
}
Lo que pasa aquí es que primero, llamas los datos con _query,
luego "divides" los datos del resultado de la siguiente forma:
(asumiendo que son 3 comentarios)
$resultado[0] es id, nombre, texto para el primer caso,
se podria imprimir:
$resultado[0]['id'], $resultado[0]['nombre'], $resultado[0]['texto'],
asi mismo con los siguientes:
$resultado[1]
$resultado[2]
Lo que hace while (o cualquier bucle) es pasar por cada uno de esos [0],[1],[2] y transformarlos a:
$resultado['id'], ya que en cada uno de los "ciclos" por los que pasa, se refiere a la posición actual que tiene.
El bucle es irrelevante mientras sepas usarlo para que pase por cada uno de los ciclos que quieras, se diferencian dependiendo de si quieres hacer algo especial con ellos. tienen sus ventajas, pero no es necesario siempre el mismo
un foreach podria ser de la misma utilidad,
seria:
Código PHP:
foreach($resultados as $comentario) {
echo $comentario['id'];
}
y seria lo mismo