Remettre à zéro la liste des résultats MySQL

Remettre à zéro la liste des résultats MySQL - SQL/NoSQL - Programmation

Marsh Posté le 06-07-2010 à 14:29:28    

Bonjour,
 
Dans un script PHP, je fais une requête.
 
//Extraction des données
$result = mysql_query("SELECT blabla" );
$row = mysql_fetch_array($result) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
 
while($row = mysql_fetch_array($result)){
echo $row['id'];
}
 
Et bien comme $row a déjà été initialisé, le résultat est que le script m'affiche les résultats à compter du second et non du premier.
Comment réinitialiser le compteur/pointeur ?
 
Merci

Reply

Marsh Posté le 06-07-2010 à 14:29:28   

Reply

Marsh Posté le 06-07-2010 à 14:33:50    

ben du fait un do while au lien d'un while ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-07-2010 à 14:41:02    

Un do while ?

 

Je pense qu'il y a une fonction toute bête similaire à reset();

 

Mais là, reset($row) ne fonctionne pas.

 


EDIT ; AAHHH j'ai retrouvé, yébon mysql_data_seek($result,0); !


Message édité par vanquishV12 le 06-07-2010 à 14:44:05
Reply

Marsh Posté le 06-07-2010 à 14:56:41    

je n'oserais te demander l'intéret de cette ligne:
 
$row = mysql_fetch_array($result) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
 
mais le do while de rufo me parait plus que judicieux

Reply

Marsh Posté le 06-07-2010 à 15:09:04    

En fait, je fais une seule requête pour afficher deux choses.
D'un côté j'ai juste besoin de récupérer deux données de n'importe quelle ligne, de l'autre (avec le while) je génère une liste avec tous les résultats.

Reply

Marsh Posté le 06-07-2010 à 16:51:36    

ok, alors do while:
 
à la place de

Code :
  1. while($row = mysql_fetch_array($result)){
  2.     echo $row['id'];
  3. }


tu fais

Code :
  1. do {
  2.     echo $row['id'];
  3. }
  4. while($row = mysql_fetch_array($result));


 
De cette manière, le premier "echo $row['id'];" t'affichera le contenu de la première ligne de $result et tu n'as pas besoin de réinitialiser $result.
 

Reply

Marsh Posté le 06-07-2010 à 17:27:13    

Mais ça me sert à quoi par rapport à ma solution ?
 
Je ne comprends pas le do while, qu'est ce que ça fait exactement (en langage humain) ?
 
Merci

Reply

Marsh Posté le 07-07-2010 à 00:27:20    

L'usage normal est de tester la présence d'enregistrement via mysql_num_rows(), qui renvoie le nombre d'enregistrements, puis, s'il y en a, de les afficher avec un while($rows=mysql_fetch_assoc($result)){blabla;}
 
Ainsi, plus de problèmes, et on utilise les fonctions qui ont été concues pour  ;)


Message édité par Pascal le nain le 07-07-2010 à 00:27:31
Reply

Marsh Posté le 07-07-2010 à 14:25:13    

vanquishV12 a écrit :

Mais ça me sert à quoi par rapport à ma solution ?
 
Je ne comprends pas le do while, qu'est ce que ça fait exactement (en langage humain) ?
 
Merci


 
do while exécute une fois la boucle au min vue que la condition est à la fin de la boucle, au contraire du while. Dans ton cas, le 1er enregistrement sera donc bien affiché.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 07-07-2010 à 17:27:16    

essaie :

Code :
  1. mysql_data_seek( $result, 0 );


 
Avant ta boucle


---------------
Créer votre blog gratuitement
Reply

Marsh Posté le 07-07-2010 à 17:27:16   

Reply

Marsh Posté le 30-07-2010 à 19:37:58    

Aucunement besoin d'un DO WHILE ici.

//Extraction des données  
$result = mysql_query("SELECT blabla" );  
 
while($row = mysql_fetch_array($result)){  
echo $row['id'];  
}



---------------
>> Culture-Info : La culture informatique pour tous (projet scolaire) <<
Reply

Marsh Posté le 30-07-2010 à 21:32:53    

vanquishV12 a écrit :

Bonjour,
 
Dans un script PHP, je fais une requête.
 
//Extraction des données
$result = mysql_query("SELECT blabla" );
$row = mysql_fetch_array($result) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
 
while($row = mysql_fetch_array($result)){
echo $row['id'];
}
 
Et bien comme $row a déjà été initialisé, le résultat est que le script m'affiche les résultats à compter du second et non du premier.
Comment réinitialiser le compteur/pointeur ?
 
Merci

Le "or die('Erreur SQL !')", c'est sur le mysql_query() qu'il faut le faire, pas sur un fetch_array :o  
Si ta requête est mauvaise, l'erreur remontera à son exécution, pas quand tu essayes d'accéder à un champ.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed