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

Langage PHP Discussion :

Incompréhension sur retour requête avec PDO


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Points : 119
    Points
    119
    Par défaut Incompréhension sur retour requête avec PDO
    Bonjour,

    Je fais face à un résultat de requête de ma BDD avec PDO que je comprends pas. J'obtient ce que je recherche en effectuant la requête sur mon SGBD mais pas avec PHP... Aprés m'être pas mal tiré les cheveux, je m'en remets à vous pour m'aiguiller.
    J'ai une BDD avec 3 tables :
    ASSEMBLAGES (id_assemblage, num_assemblage, fraction, id_dissolution, id_experience)
    DISSOLUTIONS (id_dissolution, id_experience)
    EXPERIENCES (id_experience, nom_experience)
    Pour ce qui est des contraintes, les assemblages ayant le même nom doivent tous être liés à la même experience mais ils peuvent être présent dans différentes dissolutions, la somme de leur fraction ne doit pas dépasser 1.
    Je souhaite effectuer une requête pour récupérer la somme des fractions, les dissolutions et le nom de l'experience de tous les assemblages ayant le même nom.
    Je fais donc sur mon SGBD(MYSQL) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT (SELECT SUM(fraction) FROM ASSEMBLAGES WHERE num_assemblage='A') AS sum_fraction, id_dissolution, nom_experience
    FROM ASSEMBLAGES A, EXPERIENCES R
    WHERE A.id_experience = R.id_experience AND num_assemblage = 'A'
    GROUP BY id_dissolution
    j'obtiens le tableau suivant
    sum_fraction -- id_dissolution -- nom_experience
    1.00 -- 4 -- TEST
    1.00 -- 5 -- TEST
    1.00 -- 7 -- TEST
    (C'est ce que je recherche on voit que A est bien présente sur la même experience(TEST) dans différentes disso (4,5 et 7) et la somme des fractions =1)
    Lorsque j'effectue cette même requête sous PHP avec PDO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $query = 'SELECT (SELECT SUM(fraction) FROM ASSEMBLAGES WHERE num_assemblage=:numAssemblage) AS sum_fraction, id_dissolution, nom_experience
                  FROM ASSEMBLAGES A, EXPERIENCES R
                  WHERE A.id_experience = R.id_experience
                  AND num_assemblage = :numAssemblage
                  GROUP BY id_dissolution';
        $requete = $pdo->prepare($query);
        $requete -> bindValue(':numAssemblage', $numAssemblage, PDO::PARAM_STR);
        $requete -> execute();
        $data = $requete->fetch();
    Dans les mêmes conditions (qui m'ont permis d'obtenir le "tableau" précédent), je n'ai qu'un "id_dissolution" alors que je devrais en avoir 3 ( je n'ai que $data['id_dissolution'] = 4 et non pas $data['id_dissolution'] = {4,5,7}).

    Quelqu'un sarait-il m'éclairer sur les raisons de ce résultat?
    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Points : 300
    Points
    300
    Par défaut
    Bonjour,

    fetch ne renvoie que le premier enregistrement d'un recordset.
    Utilise plutôt fetchAll, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $data = $requete->fetchAll(PDO::FETCh_OBJ);
    et $data contiendra l'ensemble du recordset.

  3. #3
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu attends plusieurs lignes de résultats, il faut une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($data = $requete->fetch()) {
        echo $data['sum_fraction'] . '-' .  $data['id_dissolution'] . '-' .$data['nom_experience'] . '<br/>';
    }

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Points : 119
    Points
    119
    Par défaut
    Ok je vais essayer ce que vous m'avez dis.
    Merci!

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

Discussions similaires

  1. Lenteur sur une requête avec jointure
    Par mister3957 dans le forum SQL
    Réponses: 16
    Dernier message: 13/08/2008, 13h10
  2. Je recherche de l'aide sur une requête avec dates
    Par Alain CARDINI dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/05/2008, 22h11
  3. [SQL] Erreur sur une requète avec un Like
    Par heruwenli dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/05/2007, 14h29
  4. Réponses: 5
    Dernier message: 06/01/2007, 04h48
  5. [VBA] Erreur sur une requête avec un opérateur
    Par elgringo2007 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/07/2006, 17h12

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