Zasadniczo nie rozumiesz, jak te rzeczy działają.
„Tablica” w mysql_fetch_array
nie jest tablicą wszystkich rekordów, ale tablicą danych w bieżącym rekordzie.
W twoim przypadku pobierasz tylko jedno pole, więc tablica będzie zawierać tylko jeden element (np. $row[0]
), ale zasada jest taka sama — jest to tablica pojedynczego rekordu, który właśnie przeczytałeś.
W tablicy znajdują się jednocześnie tylko dane dla bieżącego rekordu. To właśnie while
pętla jest dla; cofa wszystkie wczytywania każdego rekordu jeden po drugim.
Jeśli chcesz utworzyć tablicę zawierającą wszystkie dane, musisz to zrobić w ten sposób:
$fullData = array()
while($row = mysql_fetch_array($tableIndex) ){
$fullData[] = $row[0];
}
Spowoduje to umieszczenie wszystkich odczytywanych danych w jednej dużej tablicy, czego oczekujesz. Teraz możesz zrobić to, co chciałeś zrobić w pytaniu:
echo $fullData[0].'<br>';
echo $fullData[1].'<br>';
echo $fullData[2].'<br>';
Mam nadzieję, że to pomoże.
Warto tutaj zaznaczyć, że mysql_xxx()
rodziny funkcji są pomijane i uważane za przestarzałe. Jeśli dopiero uczysz się PHP (co wydaje się być prawdą), zdecydowanie zalecam zaprzestanie nauki tych funkcji i zapoznanie się z PDO
biblioteka zamiast. Jest bardziej nowoczesny i ma wiele funkcji, które mysql
funkcje nie mogą zapewnić. Ponadto przyszłe wersje PHP usuną mysql
działa całkowicie, więc w pewnym momencie będziesz musiał się przełączyć — równie dobrze może być teraz, gdy jeszcze się uczysz.
Ponadto (aby zachować istotne znaczenie dla pytania), biblioteka PDO ma funkcję, która w rzeczywistości robi to, czego szukasz w pojedynczej funkcji:PDO::fetchAll()
. Korzystanie z tej metody oznacza, że możesz pobrać wszystkie dane do jednej dużej tablicy w jednym wierszu bez konieczności wykonywania pętli while. Kod wyglądałby trochę tak:
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll();
(przykład zaczerpnięty z podręcznika PHP dla PDO::fetchAll
)