Nasıl yerine büyük bir dizi, PDO kullanarak veritabanından bir iterable resultset alabilirim?

1 Cevap php

I PDO bir veritabanı soyutlama kütüphane işlevi içinde query ben yaptım kullanıyorum.

I , which if you have a lot of results, is supposed to get memory intensive, so I want to provide an argument to toggle between a fetchAll associative array and a pdo result set that can be iterated over with foreach fetchAll() kullanarak ve daha az bellek (her nasılsa) gerektirir ediyorum.

Ben bu konuda işitme hatırlıyorum, ve ben PDO dokümanlar arandı, ama bunu yapmak için herhangi bir yararlı bir yol bulamadı.

Does anyone know how to get an iterable resultset back from PDO instead of just a flat array? And am I right that using an iterable resultset will be easier on memory?

Bu durumda önemli olmadığını, Postgresql kullanıyorum.

.

.

.

The current query function is as follows, just for clarity.

/**
 * Running bound queries on the database.
 *
 * Use: query('select all from players limit :count', array('count'=>10));
 * Or: query('select all from players limit :count', array('count'=>array(10, PDO::PARAM_INT)));
**/
function query($sql_query, $bindings=array()){
 DatabaseConnection::getInstance();
 $statement = DatabaseConnection::$pdo->prepare($sql_query);
 foreach($bindings as $binding => $value){
  if(is_array($value)){
   $statement->bindParam($binding, $value[0], $value[1]);
  } else {
   $statement->bindValue($binding, $value);
  }
 }
 $statement->execute();
 // TODO: Return an iterable resultset here, and allow switching between array and iterable resultset.
 return $statement->fetchAll(PDO::FETCH_ASSOC); 
}

1 Cevap

Ben yani yaptıktan sonra bir $statement->execute(); Sadece o nesnenin üzerinde $statement nesnesi ve foreach boyunca geçebilir, PDOStatement nesnenin kendisi şeklinde benim çözüm bulduk gibi görünüyor. Bir dizi olarak kullanmak değil, ama onunla her şey hakkında sadece yapabilirsiniz.