genmin Posté 26 Janvier 2004 Posté 26 Janvier 2004 bonjour , j'ai comme un problème avec mysql_num_rows() il me retourne une erreur d'arguments non valide. Voici mon script: $req=mysql_query("SELECT title, fname, lname, email, oempv3_subscribers.subscriber_id, oempv3_extrafieds.subscriber_id FROM oempv3_subscribers, oempv3_extrafields WHERE oempv3_subscribers.subscriber_id = oempv3_extrafieds.subscriber_id AND oempv3_subscribers.statut = 'en cours'" , $link); $res = mysql_num_rows($req); Voici l'erreur: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/web/users/alalucarne.com/htdocs/envoi7.php on line 31 Alors qu'avec ce script là ca marche !!!!!! $req=mysql_query("SELECT title, fname, lname, email, subscriber_id FROM oempv3_subscribers "); $res = mysql_num_rows($req); Si quelqu'un peu m'aider
Dan Posté 26 Janvier 2004 Posté 26 Janvier 2004 Salut Genmin, C'est simplement que ta requête ne retourne aucun résultat... tu devrais mettre: if($req) $res = mysql_num_rows($req);else $res = 0; pour éviter le cas où $res est "false" et n'est donc pas un argument valide pour la fonction mysql_num_rows() Dans ton second exemple, le select retournera toujours quelque chose si ta table n'est pas vide, alors que le premier a 2 conditions qui ne se vérifient peut-être pas dans tes enregistrements. Dan
genmin Posté 26 Janvier 2004 Auteur Posté 26 Janvier 2004 Alors je dois avoir un problème dans ma requête. Je cherche à selectionner les enregistrements d'une table seulement si une condition est rempli dans une autre. En gros j'ai une table "subscribers" avec le nom etc... sur mes membres et une autre "extrafieds" avec des infos plus précise. Et je souhaite selevtionner tout les membres de la table "subscribers" qui on choisi de recevoir des mails (et ce champ "alertes" ce trouve dans la table "extrafieds")
Anonymus Posté 26 Janvier 2004 Posté 26 Janvier 2004 Voici ton script. $req=mysql_query("SELECT title, fname, lname, email, oempv3_subscribers.subscriber_id, oempv3_extrafieds.subscriber_id FROM oempv3_subscribers, oempv3_extrafields WHERE oempv3_subscribers.subscriber_id = oempv3_extrafieds.subscriber_id AND oempv3_subscribers.statut = 'en cours'" , $link); $res = mysql_num_rows($req); Insere echo"<br>result ressource = ".$req; Et tu verras que $req ne retourne rien. Ca devrait retourner quelque chose comme #1 ou #2,.. . Le fait que la requete retourne une table vide ne cause pas d'erreurs. Seulement, la table est vide. Là, c'est une erreur dans la requete sql. Si tu as une interface type phpmyadmin, testes ta requete, tu verras si elle retourne une erreur ou une table vide.
genmin Posté 26 Janvier 2004 Auteur Posté 26 Janvier 2004 Merci beaucoup je me penchais sur ce num_rows() et je n'avais pas vue mon erreur dans ma requête. maintenant ca marche. Vraiment top WebmasterHub PS: Merci à Dan pour me répondre toujours aussi vite
Dan Posté 26 Janvier 2004 Posté 26 Janvier 2004 Vraiment top WebmasterHub En tout cas on essaye Il faut aussi un peu de chance pour que le bon interlocuteur passe par là rapidement. On ne pourra probablement pas toujours tout solutionner en quelques minutes... Mais anonymus est "le bon interlocuteur" dès qu'on touche au code php/mysql Dan
Anonymus Posté 26 Janvier 2004 Posté 26 Janvier 2004 if($req) $res = mysql_num_rows($req);else $res = 0; Si je puis me permettre : Mettre ce code ne permet pas de savoir si la requete est juste. C'est à dire : S'il y a une erreur dans la requete, ce code renverra toujours un résultat, ce qui paraitra correct, alors meme qu'il devrait s'arreter. Anonymus. (merci )
Dan Posté 26 Janvier 2004 Posté 26 Janvier 2004 Salut Anonymus, Dans le cas d'une requête de type SELECT , SHOW , EXPLAIN ou DESCRIBE , les valeurs retournées sont soit une ressource, soit FALSE dans le cas où la requête est fausse (syntactiquement ou sémantiquement). Donc, dans l'exemple donné, elle retournait FALSE a cause d'une erreur dans la requête. Si la requête est correcte et retourne 0 résultat, le mysql_numrows est appelé avec la ressource en paramêtre ... et retourne 0 . Cordialement, Dan Seules les requêtes SQL SELECT , SHOW , EXPLAIN et DESCRIBE , utilisées avec mysql_query retournent une ressource de résultat MySQL, ou bien FALSE si la requête n'a pu être exécuté correctement. Pour les autres types de requêtes SQL, mysql_query retourne TRUE en cas de succès et FALSE en cas d'erreur. Un résultat différent de FALSE , la valeur signifie que la requête soumise est valide et qu'elle a pu être exécutée correctement. Cela n'apporte aucune indication sur le nombre de lignes affectées. Il est parfaitement possible qu'une requête soit réussie, mais qu'elle ne modifie aucune ligne, ou qu'elle n'en retourne aucune.
Anonymus Posté 26 Janvier 2004 Posté 26 Janvier 2004 Si la requête est correcte et retourne 0 résultat, le mysql_numrows est appelé avec la ressource en paramêtre ... et retourne 0 . J'ai peur de ne pas comprendre... si (requete correcte) alors{ nb = nombre de lignes } sinon (sous entendu si la requete n'es pas correcte){ nb = 0 } Or si la requete n'est pas correcte, on ne peut pas retourner un resultat, meme un '0'. Dans tous les cas, il faut arreter le script si la requete n'est pas correcte. Pourquoi ? Tout simplement parce qu'elle DOIT etre correcte. Elle peut retourner un resultat '0', un tableau ou n'importe quoi, mais si la requete n'est pas correcte, ca vient d'une erreur de programme, et là, le programme ne doit pas pouvoir continuer. Un exemple ? Allez : $query="select champ from table where TRUE = FALSE";$req=mysql_query($query,$link);if($req) $res = mysql_num_rows($req);else $res = 0; Question : $res = ?? $res = 0. Alors que la requete est fausse. T'es pas d'accord ? ( honnetement ! ) Nico.
Dan Posté 26 Janvier 2004 Posté 26 Janvier 2004 T'es pas d'accord ? ( honnetement ! ) Nico. Salut Nico, Bien sûr que je suis d'accord... mais l'exemple n'avait pas pour but de réécrire la logique du code... J'aurais probablement dû mettre une instruction die() à la place du $res=0 pour que tout le monde soit content Dan
Anonymus Posté 26 Janvier 2004 Posté 26 Janvier 2004 Genmin : Alors pour le fun, on peut écrire : if ( ! $res = _AT_mysql_num_rows($req)) $res=0; ce qui signifie : Si $res=mysql_num_rows génère une erreur, alors on fait $res=0 et pour ne pas afficher le message d'erreur, on 'échappe' la fonction mysql_num_rows d'un arobase _AT_ Voilà. Anonymus.
genmin Posté 27 Janvier 2004 Auteur Posté 27 Janvier 2004 Merci pour tous ces précieux conseils Anonymus.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant