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 :

Count [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 312
    Par défaut Count
    Bonjour

    Je voudrais connaitre le nombre d'enregistrement dans ma table, j'ai fait ce code et rien ne s'affiche alors qu'il y a 3 enregistrements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $Dep="37";
    $stmt = $bdd->query("SELECT * FROM maTable WHERE Dep='$Dep'");
    $row_count = $stmt->rowCount();
    echo "<script>alert('Il y a '.$row_count.' enregistrement(s).');</script>";
    Pouvez-vous me dire pourquoi
    Merci pour vos réponses

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $Dep = 37;
    $stmt = $bdd->query("SELECT * FROM maTable WHERE Dep=" . $Dep);
    $row_count = $stmt->rowCount();
    echo "<script>alert('Il y a ".$row_count." enregistrement(s).');</script>";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Sachez toutefois que même si les middlewares du style PDO ou autres libs permettent de récupérer le nombre d'enregistrements retournée par une requête SELECT sur des colonnes comme dans le cas présent, il reste hautement préférable (en terme de performances) d'utiliser les agrégats en SQL pour faire ce genre de choses...

    C'est d'autant plus efficace lorsque vous faites cela sur des tables avec des colonnes indexées (sur tout SGBD qui se respecte, l'optimiseur saura sur quelle colonne appliquer l'agrégat COUNT(*)).

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS nb_enreg FROM maTable WHERE Dep = ...

    Par ailleurs, je constate également que votre requête n'est pas protégée. En utilisant PDO, n'hésitez pas à utiliser la méthode "prepare" qui vous simplifie cela.

    Cordialement,
    Idriss

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 312
    Par défaut
    j'ai modifié mon code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $Dep="37";
    $count=$bdd->prepare("SELECT COUNT(*) AS nb_enreg FROM maTable WHERE Dep='$Dep'");
    $count->execute();
    $nb37=$count->nb_enreg();
    echo "<script>alert('Il y a '.$nb37.' enregistrement(s).');</script>";
    et rien ne s'affiche

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Vous devriez relire la documentation de PDO sur prepare notamment.

    A tester / adapter / corriger :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $stmt=$pdo->prepare("SELECT COUNT(*) AS nb_enreg FROM maTable WHERE Dep=:dep");
    $stmt->execute(array(
        ':dep' => "37"
    ));
    $array_result = $stmt->fetch(PDO::FETCH_ASSOC);
    echo "<script>alert('Il y a " . $array_result['nb_enreg'] . " enregistrement(s).');</script>";

    Vous noterez également que votre concaténation de chaîne à la fin est incorrecte

    Cordialement,
    Idriss

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 312
    Par défaut
    Merci pour votre aide, c'est OK

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

Discussions similaires

  1. UNION et COUNT(*)
    Par Goldust dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/08/2003, 09h30
  2. limiter le résultat retourné par le count
    Par SuperFoustan dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/08/2003, 12h10
  3. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02
  4. Multiple Count
    Par Antichoc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2003, 11h19
  5. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

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