sql >> Databasteknik >  >> RDS >> Mysql

PHP SUB med foreach och fetch

En PDOStatement (som du har i $users ) är en framåtmarkör. Det betyder att en gång konsumerat (den första foreach iteration), spolas den inte tillbaka till början av resultatuppsättningen.

Du kan stänga markören efter foreach och kör satsen 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 så kan du cache med hjälp av skräddarsydd CachingIterator med en fullcache:

$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 hittar CachedPDOStatement klass som en sammanfattning . Caching-iteratorn är förmodligen mer förnuftig än att lagra resultatuppsättningen i en array eftersom den fortfarande erbjuder alla egenskaper och metoder för PDOStatement objekt som det har lindat.



  1. Den flerdelade identifieraren kunde inte bindas

  2. ORA-01653:det går inte att utöka tabellen med i tabellutrymmet ORA-06512

  3. Beräknar tidsskillnaden mellan 2 datum i minuter

  4. Kan någon förklara MySQL främmande nycklar