Как я могу получить итеративный набор результатов из базы данных, используя pdo вместо большого массива? - PullRequest
0 голосов
/ 23 апреля 2010

Я использую PDO внутри функции библиотеки абстракции базы данных query, которую я создал.

Я использую fetchAll(), который, если у вас много результатов, должен занять много памяти, поэтому я хочу предоставить аргумент для переключения между ассоциативным массивом fetchAll и pdo набор результатов, который можно перебирать с foreach и требовать меньше памяти (каким-либо образом).

Я помню, что слышал об этом, и я искал документы PDO, но не смог найти никакого полезного способа сделать это.

Кто-нибудь знает, как получить итеративный набор результатов из PDO вместо простого массива? И прав ли я, что использование итеративного набора результатов будет проще для памяти?

Я использую Postgresql, если это имеет значение в этом случае.

.

.

.

Текущая функция запроса выглядит просто для ясности.

/**
 * 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 Ответ

1 голос
/ 23 апреля 2010

Похоже, я нашел свое решение в виде самого объекта PDOStatement, то есть после выполнения $statement->execute(); Вы можете просто передать объект $statement и перейти к нему над ним. Не может использовать его как массив, но может делать с ним почти все остальное.

...