sql >> Database teknologi >  >> RDS >> Mysql

PHP PDO med foreach and fetch

En PDOStatement (som du har i $users ) er en fremad-markør. Det betyder, når den er forbrugt (den første foreach iteration), spole den ikke tilbage til begyndelsen af ​​resultatsættet.

Du kan lukke markøren efter foreach og kør sætningen igen:

$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/>";
}

Eller du kan cache ved at bruge skræddersyet CachingIterator med en fuld 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/>";
}

Du finder CachedPDOStatement klasse som en essens . Caching-iteratoren er sandsynligvis mere fornuftig end at gemme resultatsættet i et array, fordi det stadig tilbyder alle egenskaber og metoder for PDOStatement objekt, den har pakket ind.



  1. ændre begivenhedsplanlægningsstatus i mysql

  2. DbUpdateConcurrencyException ved hjælp af Entity Framework 6 med MySql

  3. Høj pladsforbrug Fra crfclust.bdb

  4. Antal andre rækker i tabellen med samme værdi