Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP PDO с foreach и извличане

PDOStatement (които имате в $users ) е курсор напред. Това означава, че веднъж консумиран (първият foreach итерация), няма да се върне назад към началото на набора от резултати.

Можете да затворите курсора след foreach и изпълнете оператора отново:

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

Или бихте могли да кеширате с помощта на персонализиран CachingIterator с пълен кеш:

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

Вие намерете CachedPDOStatement клас като същност . Итераторът за кеширане вероятно е по-разумен от съхраняването на набора от резултати в масив, защото все още предлага всички свойства и методи на PDOStatement обект, който е увил.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Flask-SQLAlchemy:Не може да се свърже отново, докато невалидна транзакция не бъде отменена

  2. обхождане на html страница с помощта на php?

  3. Как да използвате заместващи знаци за префикс като '*abc' със съвпадение срещу

  4. java.lang.AbstractMethodError:com.mysql.jdbc.PreparedStatement.setBlob(ILjava/io/InputStream;)V

  5. Кой е по-бърз и по-лек - mysqli &PDO