0

作成したデータベース抽象化ライブラリ関数内で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); 
}
4

1 に答える 1

1

PDOStatementオブジェクト自体の形式でソリューションを見つけたようです。つまり、実行した後、オブジェクトを$statement->execute();渡すだけで、その$statementオブジェクトをforeachできます。配列として使用することはできませんが、それ以外のことはほぼすべて実行できます。

于 2010-04-22T21:43:59.437 に答える