Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai une erreur palpitante au deuxième foreach du code suivant, que je ne m'explique pas (à placer dans un controller) :
This result is a forward only result set, calling rewind() after moving forward is not supported
$sm = $this->getServiceLocator(); $adapter = $sm->get('Zend\Db\Adapter\Adapter'); $requete = $adapter->query('SELECT * FROM test'); $rowset2 = $requete->execute(); //$rowset2->buffer(); // ne change pas l'erreur $resultSet = new ResultSet(); $resultSet->initialize($rowset2); foreach($resultSet as $row) { echo $row->id.'<br/>'; echo $row->col1.'<br/>'; echo $row->col2.'<br/>'; } foreach($resultSet as $row) { echo $row->id.'<br/>'; echo $row->col1.'<br/>'; echo $row->col2.'<br/>'; }
l'adapter est un PDO MySQL.
Merci d'avance pour vos réponses !
Hors ligne
Bonsoir,
Les résultats des requêtes SQL ne supportent pas une deuxième boucle.
Il me semble qu'on peut les rembobiner... avec un rewind.
Hors ligne
Merci pour cette première réponse, mais impossible d'utiliser le rewind non plus, j'avais déjà tenté sans succès ^^
Précision peut être utile :
Lorsque j'utilise le même procédé mais sur un tableGateWay, il me suffit de faire un "$tableGateWay->setBuffer()" et je peux alors parcourir plusieurs fois les résultats, mais lorsque j'applique le buffer sur l'adapter, cela n'a aucun effet...
Je pense que c'est la manière dont les classes PDO et Adapter ont été implémentées...
Dernière modification par efreet_cs (23-10-2012 23:58:00)
Hors ligne
$sm = $this->getServiceLocator(); $adapter = $sm->get('Zend\Db\Adapter\Adapter'); $requete = $adapter->query('SELECT * FROM test'); $rowset2 = $requete->execute(); //$rowset2->buffer(); // ne change pas l'erreur $resultSet = new ResultSet(); $resultSet->initialize($rowset2); $resultSet->buffer(); <-------------------- foreach($resultSet as $row) { echo $row->id.'<br/>'; echo $row->col1.'<br/>'; echo $row->col2.'<br/>'; } foreach($resultSet as $row) { echo $row->id.'<br/>'; echo $row->col1.'<br/>'; echo $row->col2.'<br/>'; }
Hors ligne