Comment puis-je obtenir un resultset itérables de la base de données en utilisant pdo, au lieu d'un grand tableau?

StackOverflow https://stackoverflow.com/questions/2694247

Question

J'utilise AOP dans une fonction de bibliothèque d'abstraction de base de données qui query Je l'ai fait.

J'utilise fetchAll() , qui, si vous avez beaucoup de résultats, est censé obtenir de la mémoire intensive, donc je veux donner un argument pour basculer entre un tableau associatif fetchAll et un jeu de résultats pdo qui peuvent être itéré avec foreach et nécessite moins de mémoire (en quelque sorte).

Je me souviens avoir entendu parler, et je recherché par les docs AOP, mais je ne pouvais pas trouver un moyen utile de le faire.

Est-ce que quelqu'un sait comment obtenir un retour itérables resultset de PDO au lieu d'un tableau plat? Ai-je raison que l'utilisation d'un ResultSet itérables sera plus facile sur la mémoire?

J'utilise Postgresql, si elle importe dans ce cas.

.

.

.

La fonction de requête est suit comme, juste pour plus de clarté.

/**
 * 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); 
}
Était-ce utile?

La solution

On dirait que j'ai trouvé ma solution sous la forme de l'objet PDOStatement lui-même, à savoir après avoir fait une $statement->execute(); Vous pouvez simplement passer le long de l'objet $statement et foreach sur cet objet. Ne peut pas l'utiliser comme un tableau, mais peut faire à peu près tout le reste avec.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top