Réitération d'un ensemble de résultats PDO depuis le début
Lors de la transition des méthodes MySQL SELECT aux méthodes PDO, réinitialisation du pointeur de tableau pour parcourir le résultat défini plusieurs fois peut être difficile. Cela est dû à la différence dans la façon dont ces méthodes gèrent les pointeurs de tableau.
Dans le code fourni, la première boucle while parcourt avec succès le tableau récupéré à partir de la ligne zéro. Cependant, la deuxième boucle while renvoie un ensemble vide puisque la méthode fetch() de PDO avance le pointeur de tableau à chaque appel.
Pour obtenir le comportement souhaité, on peut stocker les résultats dans un tableau, puis parcourir ce tableau plusieurs fois. Voici un exemple :
$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC'); $stmt->setFetchMode(PDO::FETCH_ASSOC); $stmt->execute(); $rows = $stmt->fetchAll(); foreach ($rows as $r) { // first run } foreach ($rows as $r) { // second run }
En utilisant fetchAll(), toutes les lignes de l'ensemble de résultats sont stockées dans le tableau $rows. Cela vous permet de parcourir le tableau plusieurs fois sans réinitialiser manuellement le pointeur du tableau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!