Warning: mysql_fetch_array(): supplied argument is not a ...

Eléphant du PHP | 231 Messages

12 mars 2005, 00:57

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/derniere/domains/derniere-bataille.com/public_html/script/index.php on line 24
le code :
$req = mysql_query("select * from joueurs order by num_C desc limit ".$i.",1");

for($i=0; $i<=$total; $i++)
{
   $ligne = mysql_fetch_array($req); //ici c'est la ligne 24 !
   $id = $ligne["id"];
   $email = $ligne["email"];
....
}
c'est trop bizard parce que j'ai tester la requete et sous mysql pour les valeurs de que prend $i ben c bon ça fonctionne :roll: j'ai bien une ligne qui s'affiche donc logiquement cette ligne est convertit en tableau par le mysql_fetch_array mé apparement ça veut pas, je comprend pas :cry:

Eléphanteau du PHP | 32 Messages

12 mars 2005, 02:38

Je ne suis pas sûr de ce que je vais dire , mais à mon avis ( j'ai pas vérifié ) si ta variable $i est > 1 ( imaginons $i == 2 ) , ça ferais "LIMIT 2,1" ... et p-e que ton erreur vient de là , p-e que mysql ne gère pas LIMIT 2,1 , mais seulement LIMIT 1,2

Je répète , ce n'est qu'une hypothèse , je n'ai rien vérifié

Sinon , c'est soit qu'il y a une faute sur le nom de ta table "joueurs" , soit sur le nom de ton champ "num_C"

Mammouth du PHP | 1339 Messages

12 mars 2005, 02:40

$sql = "SELECT * FROM joueurs ORDER BY num_C DESC LIMIT ".$i.",1"; 
$req = mysql_query($sql);
while($ligne = mysql_fetch_array($req)) { //ici c'est la ligne 24 ! 
   $id = $ligne["id"]; 
   $email = $ligne["email"]; 
}
Et si ca marche toujours pas tu fais echo $sql; et tu regarde la gueule de ta requete :) Et tu la test dans PHPMyADMIN !
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Mammouth du PHP | 1339 Messages

12 mars 2005, 02:41

Je ne suis pas sûr de ce que je vais dire , mais à mon avis ( j'ai pas vérifié ) si ta variable $i est > 1 ( imaginons $i == 2 ) , ça ferais "LIMIT 2,1" ... et p-e que ton erreur vient de là , p-e que mysql ne gère pas LIMIT 2,1 , mais seulement LIMIT 1,2

Je répète , ce n'est qu'une hypothèse , je n'ai rien vérifié

Sinon , c'est soit qu'il y a une faute sur le nom de ta table "joueurs" , soit sur le nom de ton champ "num_C"
On peu faire LIMIT 2,1
Ca affichera 1 resultat a partir du 2eme ligne :)
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 231 Messages

12 mars 2005, 10:11

oui et j'ai tester le echo dans phpadmin et ça m'affiche une ligne ... :roll: c'est pk je comprend pas que la requete mysql_fetch_array ne fonctionne pas :cry:

Administrateur PHPfrance
Administrateur PHPfrance | 1275 Messages

12 mars 2005, 10:42

Le premier code ne peut pas fonctionner, tu envoie la requete avant ta boucle.

Utilises le code de Elien en remplacant $i par une valeur.

Exemple :
// on envoie une requete qui selectionne les 20 premiers enregistrements
$sql = "SELECT * FROM joueurs ORDER BY num_C DESC LIMIT 20,0";
$req = mysql_query($sql);
// $req est un pointeur qui va permettre d'accéder aux valeurs avec une fonction mysql_fetch_*

// parcours du tableau de résultats
while($ligne = mysql_fetch_array($req)) {
   $id = $ligne["id"];
   $email = $ligne["email"];
}
Si tu ne comprends pas ce que retourne mysql_fetch_array (je te conseille même plutot d'utilise mysql_fetch_assoc), essaies ce code :
$sql = "SELECT * FROM joueurs ORDER BY num_C DESC LIMIT 20,0";
$req = mysql_query($sql);

echo '<h1>mysql_fetch_array</h1><pre>';
var_dump(mysql_fetch_array($req));
echo '</pre><hr>';
echo '<h1>mysql_fetch_assoc</h1><pre>';
var_dump(mysql_fetch_assoc($req));
echo '</pre><hr>';
echo '<h1>mysql_fetch_row</h1><pre>';
var_dump(mysql_fetch_row($req));
echo '</pre>';

Eléphant du PHP | 231 Messages

12 mars 2005, 12:43

en fait il suffisait de mettre la req dans la boucle for :? ...