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 :

Requête préparée en PDO [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut Requête préparée en PDO
    Bonjour,

    Je souhaite totaliser le nombre de lignes de la table plant pour laquelle le champ classification vaut telle ou telle valeur. Comme il va falloir que je réédite cette recherche sur une dizaine de valeurs, j'ai cru comprendre qu'une requête préparée pourrait être utile.
    Ceci étant, ceci sera ma 1ère requête préparée et je bloque.
    Mon code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
     
    	include "../php/PDO_conn.php";   // Connexion avec la BDD
     
     
    	$SQL = "SELECT * FROM plant WHERE classification= :classification";
    	$prep = $pdo->prepare($SQL);
    	$requete->bindValue(':classification', $classification);
     
    	$classification = 'arbre';
    	$prep->execute();
    	$rows0 = $prep->rowCount();
     
    	$classification = 'herbacée';
    	$prep->execute();
    	$rows1 = $prep->rowCount();
     
    	echo $rows0." ".$rows1;
    ?>
    Mais il n'affiche rien. Merci d'avance de vos conseils avisés.

  2. #2
    Membre émérite Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Par défaut
    Bonjour !

    Tu devrais faire le bind à chaque fois, car il fait la résolution lors du bind (donc valeur non set, null en gros mais avec un warning undefined variable).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php
     
    	include __DIR__ . '/../php/PDO_conn.php'; // Connexion avec la BDD
     
    	$sql = 'SELECT * FROM plant WHERE classification= :classification';
    	$prep = $pdo->prepare($sql);
     
    	$prep->execute([
                ':classification' => 'arbre',
            ]);
    	$rows0 = $prep->rowCount();
     
    	$prep->execute([
                ':classification' => 'herbacée',
             ]);
    	$rows1 = $prep->rowCount();
     
    	echo "{$rows0} arbres et {$rows1} herbacés";
    Tu peux encore optimiser ce code avec un count, group by et where ou having pour récupérer les deux valeurs en une seule requête.

  3. #3
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Super, Théocrite. Merci beaucoup !
    Comment faire dans le cas ou le champ 'classification' peut prendre 2 modalités ?
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$prep->execute([
                ':classification' => 'mousse OR sphaigne',
             ]);

  4. #4
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Salut Denis,

    il aurait fallu utiliser bindParam dans votre premier code.
    Pour le OR , faudrait le gérer au niveau de la requête.
    Et attention au rowCount avec SELECT http://php.net/manual/fr/pdostatement.rowcount.php

  5. #5
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Willy_k,

    Merci pour votre intervention.

    Citation Envoyé par Willy_k Voir le message
    il aurait fallu utiliser bindParam dans votre premier code.
    Ok, merci mais je vais conserver la proposition de Theocrite.


    Citation Envoyé par Willy_k Voir le message
    Pour le OR , faudrait le gérer au niveau de la requête.
    D'accord, bien compris.

    Citation Envoyé par Willy_k Voir le message
    Et attention au rowCount avec SELECT http://php.net/manual/fr/pdostatement.rowcount.php
    Cette remarque concerne t'elle le fait que ça ne fonctionne pas toujours ?

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Je souhaite totaliser le nombre de lignes de la table plant pour laquelle le champ classification vaut telle ou telle valeur
    Plutôt que d'importer la table puis de compter les lignes, pourquoi ne pas utiliser directement le comptage en SQL ?
    S'il s'agit de compter pour chaque espèces en une seule fois :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT classification, COUNT(*) AS nb
    FROM plant 
    GROUP BY classification
    Ici on récupère un tableau du genre :
    classification, nb
    arbre, 10
    herbacée, 5

    S'il s'agit de compter au coup par coup pour une classification :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) AS nb
    FROM plant 
    WHERE classification = :classification
    Et là on récupère simplement un nb.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. [PDO] Requête préparée PDO
    Par ben256xp dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 03/06/2013, 09h47
  2. [MySQL] Problème de requête préparée avec PDO
    Par fab56 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/01/2013, 22h06
  3. [PDO] PDO PHP-POO et requêtes préparées
    Par distar dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/01/2012, 19h04
  4. [PDO] Requête préparée via PDO
    Par immat dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/10/2008, 14h01
  5. [PDO] Problème de requête préparée (à n'y rien comprendre?)
    Par waldo2188 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/03/2007, 21h53

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