sql >> Base de Datos >  >> RDS >> Mysql

mysql_fetch_array y bucle while en php

Estás malinterpretando fundamentalmente cómo funcionan estas cosas.

La "matriz" en mysql_fetch_array no es una matriz de todos los registros, sino una matriz de los datos dentro del registro actual.

En su caso, solo está obteniendo un solo campo, por lo que la matriz solo contendrá un solo elemento (es decir, $row[0] ), pero el principio es el mismo:es una matriz del único registro que acaba de leer.

Solo los datos del registro actual están en la matriz en cualquier momento. Eso es lo que while el bucle es para; retrocede cualquier carga cada registro uno tras otro.

Si desea crear una matriz que contenga todos los datos, debe hacerlo así:

$fullData = array()
while($row = mysql_fetch_array($tableIndex) ){
    $fullData[] = $row[0];
}

Eso pondrá todos los datos que está leyendo en una gran matriz única, que es lo que está esperando. Ahora puedes hacer lo que querías hacer en la pregunta:

echo $fullData[0].'<br>';
echo $fullData[1].'<br>';
echo $fullData[2].'<br>';

Espero que ayude.

Vale la pena señalar aquí que mysql_xxx() La familia de funciones está en desuso y se considera obsoleta. Si solo está aprendiendo PHP (que parece ser el caso), le recomiendo que deje de aprender estas funciones y aprenda el PDO biblioteca en su lugar. Es más moderno y tiene muchas características que mysql funciones no pueden proporcionar. Además, las futuras versiones de PHP eliminarán el mysql funciona por completo, por lo que tendrá que cambiar en algún momento; también puede ser ahora, mientras aún está aprendiendo.

Además (para mantener las cosas relevantes para la pregunta), la biblioteca PDO tiene una función que de hecho hace lo que está buscando en una sola función:PDO::fetchAll() . Usar este método significa que puede obtenga todos los datos en una sola gran matriz en una línea sin necesidad de hacer un ciclo while. El código se vería un poco así:

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll();

(ejemplo tomado del manual de PHP para PDO::fetchAll )