sql >> Database >  >> RDS >> Mysql

PHP PDO met foreach en fetch

Een PDOStatement (die je hebt in $users ) is een voorwaartse cursor. Dat betekent dat, eenmaal geconsumeerd (de eerste foreach iteratie), zal het niet terugspoelen naar het begin van de resultatenset.

U kunt de cursor sluiten na de foreach en voer de instructie opnieuw uit:

$users       = $dbh->query($sql);
foreach ($users as $row) {
    print $row["name"] . " - " . $row["sex"] . "<br/>";
}

$users->execute();

foreach ($users as $row) {
    print $row["name"] . " - " . $row["sex"] . "<br/>";
}

Of u kunt cachen met behulp van op maat gemaakte CachingIterator met een volledige cache:

$users       = $dbh->query($sql);

$usersCached = new CachedPDOStatement($users);

foreach ($usersCached as $row) {
    print $row["name"] . " - " . $row["sex"] . "<br/>";
}
foreach ($usersCached as $row) {
    print $row["name"] . " - " . $row["sex"] . "<br/>";
}

Je vindt de CachedPDOStatement klasse als kern . De caching-iterator is waarschijnlijk verstandiger dan het opslaan van de resultaatset in een array, omdat het nog steeds alle eigenschappen en methoden van de PDOStatement biedt object dat het heeft ingepakt.



  1. Hoe een gebruiker aan te maken in PostgreSQL

  2. mysqli-query geeft alleen eerste rij terug

  3. Inleiding tot gegevenskoppelingen en -relaties

  4. Volledige lijst met locaties in MySQL