IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

mysql_num_rows ne retourne pas le nombre de lignes de la requête [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut mysql_num_rows ne retourne pas le nombre de lignes de la requête
    Bonjour,

    j'entreprends de convertir un code qui utilise les fonctions MySQL_xx en PDO et je constate un fonctionnement que je ne comprends pas.

    Le code à convertir est :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      $requete="SELECT * FROM machines";
      $result = mysql_query($requete) or die ("Impossible d'exécuter la requete.");
      $num_rows = mysql_num_rows($result);
      echo "Nombre de serveurs : <b>";echo $num_rows;echo "</b><br>";
    et la variable $num_rows ne vaut que 129 alors que php_my_admin retourne 292 pour SELECT * FROM machines.
    Du coup, ma tentative de conversion en PDO n'est pas bonne, mais je ne comprends pas...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      $sql="SELECT * FROM machines";
      $qid = $bdd->query($sql);
      $num_rows=0;  
      while( $ligne=$qid->fetch(PDO::FETCH_OBJ) ) $num_rows++;

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans 20 messages tu vas nous dire comme d'habitude qu'en fait tu n'étais pas sur le bon base de donnée.

    Sur la forme cependant ta méthode de comptage n'est pas efficace.
    Je te renvois vers la doc :
    http://php.net/manual/fr/pdostatement.rowcount.php
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Ca m'aurait simplifié la vie d'avoir fait une erreur bête, mais ce n'est pas celle-là (je n'affirme pas ne pas avoir fait une erreur bête )
    un var_dump($bdd) m'indique que je suis sur la bonne bdd.

    Pour essayer de comprendre, j'ai ajouté dans le vieux code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      $num=0;
      while ($ligne=mysql_fetch_array($result)) {echo $ligne['name'];$num++;echo "/num=".$num."<br/>";}
    et dans le code pdo :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      $num_rows=0;  
      while( $ligne=$qid->fetch(PDO::FETCH_OBJ) ) {$num_rows++;echo "nom:". $ligne->name."/num=".$num_rows."<br/>";}
    Le premier retourne 129 valeurs et le second 292 et dans l'affichage du vieux code, je constate qu'il saute plein de lignes...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu n'as jamais entendu parler de COUNT(*) ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $requete="SELECT COUNT(*) FROM machines";
    C'est quand même la méthode la plus efficace et sûr pour COMPTER un nombre de lignes...

    La bonne question est :
    • "pourquoi rowCount() n'est pas adapté avec une requête SELECT, alors que c'est là qu'on en a le plus besoin !"


    Pour la plupart des bases de données, PDOStatement::rowCount() ne retourne pas le nombre de lignes affectées par une requête SELECT.
    À la place, utilisez PDO::query() pour faire une requête SELECT COUNT(*), puis utilisez PDOStatement::fetchColumn() pour récupérer le nombre de lignes retournées.
    Votre application peut ainsi effectuer la bonne action.
    Dernière modification par Invité ; 16/08/2015 à 15h51.

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Si je connaissais. Mais ça ne change rien :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      $sql="SELECT COUNT(*) AS compte FROM `machines`";
      $qid = $bdd->query($sql);
      $ligne=$qid->fetch(PDO::FETCH_OBJ);
      echo "count:".$ligne->compte."<br/>";

    ça retourne aussi 292

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ce n'est pas le résultat que tu veux 292 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    ....alors que php_my_admin retourne 292 pour SELECT * FROM machines....
    Jean-Claude Van Damme, sors de ce corps !!!!

    Dans PhpMyAdmin, as-tu pensé à vérifier combien la table "machines" contient EFFECTIVEMENT de lignes ??

  8. #8
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Il y a bien 292 lignes dans cette table, donc le code PDO ne se trompe pas alors que l'ancien se trompait...Je fais le point demain avec les utilisateurs...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/06/2011, 23h09
  2. UPDATE pas même nombre de lignes que SELECT
    Par CinePhil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/11/2008, 16h07
  3. [PDO] Compter le nombre de lignes d'une requête SELECT
    Par WerKa dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/06/2007, 20h57
  4. Réponses: 6
    Dernier message: 19/03/2007, 11h09
  5. Compter le nombre de lignes d'une requête sélection
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/07/2006, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo