boucle while a l'infinie...

Eléphant du PHP | 110 Messages

01 mai 2008, 22:39

bonsoir

je viens de découvrir un petit soucis.
jusqu'à présent lorsque je codais pour interroger une BD mysql je faisais ceci:
connexion a la BD .....
$requete=mysql_query(SELECT * FROM table);
while($resultat=mysql_fetch_array($requete)){ action ....;}
tout ce passait très bien. Mais voila que pour des raisons que j'ignore j'ai écris la chose suivante.
connexion a la BD .....
$requete=mysql_query(SELECT * FROM table);
$resultat=mysql_fetch_array($requete);
while($resultat){ action ....;}
et là, ma boucle tourne a l'infinie sur le premier élément du tableau renvoyé par mysql_fetch_array.

je comprends pas pourquoi? while considère tjrs a "true" la var $resultat ????? alors comment fait t'il ds l'autre méthode
(while($resultat=mysql_fetch_array($requete)))
quelque chose m'échappe...
:wink:
A+

Mammouth du PHP | 19672 Messages

01 mai 2008, 22:52

La première formulation était la meilleure et on peut l'améliorer en codant plus strictement :
while(false !== ($resultat = mysql_fetch_array($requete)))
{
    action ....;
} 
En traitant les données retournées, à chaque tour de boucle, le pointeur avance dans le "resultset" : si tu définis ton résultset avant la boucle, il prendra la première ligne et n'ira pas plus loin : donc ta variable ne vaudra jamais false et la boucle ne s'arrêtera qu'avec le timeout de la configuration de PHP.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 110 Messages

02 mai 2008, 00:31

merci, c'est très clair.
merci aussi pour le petit plus
A+
que de + :wink: