pb de pointeur ? avec mysql_fetch_array (ou assoc, row...)

ricky
Invité n'ayant pas de compte PHPfrance

23 août 2005, 12:33

Bonjour,

je n'ai pas eu le courage de lire les 52 autres pages pour voir si le pb était déjà référencé ou non, si c'est le cas, désolé pour la redite!

Voici un problème tout simple en apparence, mais impossible de comprendre pourquoi ça marche pas :? :

quand j'effectue une requête SQL dans ma bdd, pas de souci.

Par contre, quand j'extraie le résultat à l'aide de mysql_fetch_row par exemple et d'une boucle while, impossible de récupérer la première ligne du résultat !!
Si mysql_num_rows(...) me donne la valeur 3 par exemple suite à ma requête SQL, j'obtiens seulement 2 lignes avec le code suivant, le 1er résultat rencontré étant zappé :

$resultat=
mysql_query("...ma requête...")
$num=
mysql_num_rows($resultat);
if ($num>0)
{
while ($row=
mysql_fetch_row($resultat)) printf ("résultat : %s <br>", $row[0]);
}


J'imagine que c'est un pb de pointeur, mais impossible de rencontrer une trace de ce pb quelquepart sur le net.

Merci par avance pour votre aide ... :wink:

Invité
Invité n'ayant pas de compte PHPfrance

23 août 2005, 13:53

En fait, j'ai déjà testé les trois ! (mysql_fetch_array, row, et assoc), mais j'ai trouvé entre temps le pb :

je fais un peu plus haut dans mon code appel à la même fonction (sur la même requête) dans une structure conditionnelle (if). Même si la condition n'est pas vérifiée, le fait d'avoir fait appel à la fonction une fois décale logiquement le pointeur de 1. cqfd

Je me pose donc la question : commente réinitialise-t-on le pointeur sur le résultat d'une requête mysql_query ?...

ViPHP
ViPHP | 1380 Messages

23 août 2005, 13:54

Tu dois avoir une lecture du 'resulat' plus haut dans le code. Chaque lecture de $résulat avancera le pointeur d'une position. Pour t'en assurer, replace le pointeur de résultat sur le début du recordset renvoyé par MySQL:
mysql_data_seek($resultat, 0);
ripat

Invité
Invité n'ayant pas de compte PHPfrance

23 août 2005, 14:16

C'est exactement ça : je fais une lecture de $resultat dans ma boucle if un peu avant.

Merci par contre pour la fonction mysql_data_seek, je sais maintenant comment réinitialiser le pointeur !!! J'ai donc la réponse à ma question :D

Mammouth du PHP | 19672 Messages

23 août 2005, 18:29

Et pour ton code, essaye sous cette forme :
<?php
$resultat = mysql_query("...ma requête...");
$num = mysql_num_rows($resultat);
if ($num > 0)
{
    while ($row = mysql_fetch_assoc($resultat))
    {
        printf ("résultat : %s <br>", $row['nom_du_champ_de_la_table']);
    }
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 164 Messages

24 août 2005, 00:24

<?php
$resultat = mysql_query("...ma requête...");

while ($row = mysql_fetch_assoc($resultat))
{
printf ("résultat : %s <br>", $row['nom_du_champ_de_la_table']);
}

?>

ce code la suffit[/code]