Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql_fetch_array e while loop em php


Você está fundamentalmente entendendo mal como essas coisas funcionam.

O "array" em mysql_fetch_array não é uma matriz de todos os registros, mas uma matriz dos dados dentro do registro atual.

No seu caso, você está apenas buscando um único campo, então a matriz conterá apenas um único elemento (ou seja, $row[0] ), mas o princípio é o mesmo -- é uma matriz do único registro que você acabou de ler.

Apenas os dados do registro atual estão na matriz a qualquer momento. Isso é o que while laço é para; ele volta a carregar cada registro um após o outro.

Se você quiser criar um array que contenha todos os dados, você precisa fazer assim:
$fullData = array()
while($row = mysql_fetch_array($tableIndex) ){
    $fullData[] = $row[0];
}

Isso colocará todos os dados que você está lendo em um único grande array, que é o que você espera. Agora você pode fazer o que queria fazer na pergunta:
echo $fullData[0].'<br>';
echo $fullData[1].'<br>';
echo $fullData[2].'<br>';

Espero que ajude.

Vale ressaltar aqui que o mysql_xxx() família de funções são preteridas e consideradas obsoletas. Se você está apenas aprendendo PHP (o que parece ser o caso), eu recomendo fortemente que você pare de aprender essas funções e aprenda o PDO biblioteca em vez disso. É mais moderno e tem muitos recursos que o mysql funções não podem fornecer. Além disso, versões futuras do PHP removerão o mysql funções inteiramente, então você terá que mudar em algum momento - pode muito bem ser agora, enquanto você ainda está aprendendo.

Além disso (para manter as coisas relevantes para a pergunta), a biblioteca PDO tem um recurso que de fato faz o que você procura em uma única função:PDO::fetchAll() . Usar este método significa que você pode buscar todos os dados em uma única grande matriz em uma linha sem a necessidade de fazer um loop while. O código ficaria um pouco assim:
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll();

(exemplo retirado do manual do PHP para PDO::fetchAll )