sql >> Database >  >> RDS >> Mysql

mysql_fetch_array en while-lus in php

Je begrijpt fundamenteel niet hoe deze dingen werken.

De "array" in mysql_fetch_array is geen array van alle records, maar een array van de gegevens binnen het huidige record.

In jouw geval haal je maar een enkel veld op, dus de array zal maar een enkel element bevatten (bijv. $row[0] ), maar het principe is hetzelfde -- het is een array van de enkele record die je zojuist hebt gelezen.

Alleen de gegevens voor het huidige record bevinden zich op elk moment in de array. Dat is wat de while lus is voor; het gaat terug van elke lading, de een na de ander.

Als u een array wilt maken die alle gegevens bevat, moet u dit als volgt doen:

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

Dat zal alle gegevens die u leest in één grote array plaatsen, en dat is wat u verwacht. Nu kunt u doen wat u in de vraag wilde doen:

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

Ik hoop dat dat helpt.

Het is de moeite waard om erop te wijzen dat de mysql_xxx() familie van functies worden afgekeurd en als achterhaald beschouwd. Als je net PHP leert (wat het geval lijkt te zijn), raad ik je ten zeerste aan om te stoppen met het leren van deze functies en de PDO te leren. bibliotheek in plaats daarvan. Het is moderner en heeft veel functies die de mysql functies niet kunnen bieden. Bovendien zullen toekomstige versies van PHP de mysql . verwijderen volledig functioneert, dus je zult op een gegeven moment moeten overschakelen - het kan net zo goed nu zijn, terwijl je nog aan het leren bent.

Ook (om de zaken relevant te houden voor de vraag), heeft de PDO-bibliotheek een functie die in feite doet wat u zoekt in een enkele functie:PDO::fetchAll() . Het gebruik van deze methode betekent dat u kunt haal alle gegevens op in een enkele grote array in één regel zonder dat u een while-lus hoeft uit te voeren. De code zou er ongeveer zo uitzien:

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

(voorbeeld uit de PHP-handleiding voor PDO::fetchAll )



  1. De functie lower() voor internationale tekens in postgresql

  2. PostgreSQL:SELECTEER WAAR minder dan 15 minuten oud

  3. Opgeslagen procedure en machtigingen - Is UITVOEREN voldoende?

  4. Waarom heeft mijn InnoDB-tabel een rare waarde voor het aantal records?