Maxy.fr

Lire plusieurs fois toutes les données récupérées avec fetch en PDO

Vous connaissez tous la méthode suivante pour lire une série de données enregistrées via MySQL :

$listeRep = $bdd->query("SELECT * FROM registre ORDER BY id DESC");

while($listeData = $listeRep->fetch())
{
    echo $listeData['nom'];
}

 

Vous savez aussi qu'il est parfois utile de lire plusieurs fois ces données dans deux boucles différentes, et plutôt que d'executer une nouvelle requête de lecture de la base de données on serait tenté par faire la chose suivante :

$listeRep = $bdd->query("SELECT * FROM registre ORDER BY id DESC");

while($listeData = $listeRep->fetch())
{
    echo $listeData['nom'];
}

while($listeData = $listeRep->fetch())
{
    echo $listeData['nom'];
}

Mais si vous essayez cette méthode, vous vous rendrez compte que seule la première boucle est fonctionnelle. La deuxième ne retourne aucune donnée.

Pourquoi ? Simplement parce que fetch() fonctionne par curseur. Il permet de lire les données lignes par lignes, et une fois qu'il est arrivé au bout des données présente dans la table, le curseur ne se réinitialise pas. Donc lorsque vous exécutez une nouvelle fois la boucle, vous n'avez pas une nouvelle fois les données.

Une solution simple pour résoudre se problème, c'est d'enregistrer les données dans un tableau à l'aide de fetchAll(), et il sera ensuite possible de les lires plusieurs fois :

$listeRep = $bdd->query("SELECT * FROM registre ORDER BY id DESC");

$liste = $listeRep->fetchAll();

foreach($liste as $listeData)
{
    echo $listeData['nom'];
}

foreach($liste as $listeData)
{
    echo $listeData['nom'];
}

 

Catégories : PHP, MySql

Par Guillaume le 31/03/2015 à 22:41

Partager l'article :

Articles similaires

Trier un tableau multidimensionnel en PHP

Il arrive parfois que l'on doivent trier un tableau contenant d'autres tableau suivant des valeurs pas directement accessibles. En soit on se retrouve bloqué car les fonctions de tries classique (asort(), ksort() ...) ne permettent pas de trier comme on le souhaite notre tableau. Sachez...

Enregistrer un tableau PHP dans un fichier

Il est parfois utile d'enregistrer dans un fichier des données en provenance d'un code PHP. Sachez qu'il est plutôt simple d'enregistrer un tableau de données dans un fichier en utilisant la fonction serialize().   Voici le code permettant d'enregistrer les données...

Utiliser la programmation pour résoudre un problème mathématiques

Vous avez sûrement entendu parlé de cet exercice de mathématiques qui fait tant parler de lui depuis quelques jours sur internet. Cet exercice a priori simple qu'un professeur Vietnamien a donné à faire à ses élèves d'une classe...