sql >> Databáze >  >> RDS >> Mysql

PHP PDO s foreach a fetch

PDOStatement (které máte v $users ) je dopředný kurzor. To znamená, že jakmile je spotřebován (první foreach iterace), nepřetočí se na začátek sady výsledků.

Po foreach můžete kurzor zavřít a proveďte příkaz znovu:

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

Nebo můžete ukládat do mezipaměti pomocí přizpůsobeného CachingIterator s plnou 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/>";
}

najdete CachedPDOStatement třída jako podstata . Iterátor ukládání do mezipaměti je pravděpodobně rozumnější než ukládání sady výsledků do pole, protože stále nabízí všechny vlastnosti a metody PDOStatement objekt, který má zabalený.



  1. CakePHP Databázové připojení Mysql chybí nebo se nepodařilo vytvořit

  2. Jak získat nejnovější 2 položky na kategorii v jednom výběru (s mysql)

  3. Proč mohou mít funkce PL/pgSQL vedlejší efekt, zatímco funkce SQL nikoli?

  4. Dopad definice sloupce VARCHAR2 s větší délkou