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 :

requete SQL différente entre MySQL et php [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    si c'est la méthode query de pdo, ça te renvoie un objet (l'équivalent de ta ressource avec le connecteur mysql)... lis la doc... cet objet est de type PDOStatement...

    ou alors faut que tu montres ce que tu mets dans connexion::query()

    or tu utilises fetch() qui ne retourne qu'une seule ligne... ça devrait être fetchAll() si tu veux générer ton tableaux en une seule fois avant ta boucle de lecture...

    autre chose, pourquoi repasser par un tableau ($donnees) avant d'afficher????

    tu alloues de la mémoire inutilement et allourdis le temps d'exécution et la relecture pour un humain pour rien... $infoEnf est largement suffisant et parlant...



    quitte à encapsuler autan y aller franco...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $reqEnf=$connexion->requeteSelection($sqlEnf);
                    $infoEnf=$reqEnf->fetchAll();
                    $lignesTotalRecu=$reqEnf->rowCount();
    devrait être dans requeteSelection()
    de même, que de mettre un echo dans cette méthode qui va s'afficher en vrac dans ta page... il faut apprendre à mieux gérer ton code et les erreurs...

    et pourquoi stocker un retour de requête dans $this qui est ta connexion?

    l'idée est de faire un tableau avec 3 parties qui sera renvoyé (moins lourd qu'un objet vu ce qu'on a besoin de faire derrière):
    • ['count'] qui contient le nombre de ligne
    • ['error'] qui contient le texte de l'erreur ou null
    • ['data'] qui contient les données ou null


    ça donne pour :
    Code php : 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
    function requeteSelection($requete)
    {
        try
        {
            if($this->connexionActive() == false)
                return array('count'=>0,'error'=>'Connexion inactive','data'=>null);
            else
            {
                $donnees = $this->connexion->query($requete);
                return array('count'=>$donnees->rowCount(),'error'=>null,'data'=>$donnees->fetchAll(PDO::FETCH_ASSOC));
            }
        }
        catch(PDOException $e)
        {
            echo "Echec lors de l'exécution de la requête : ".;
            return array('count'=>0,'error'=>$e->getMessage(),'data'=>null);
        }
    }

    il vaut mieux fixer le type de retour attendu dans fetchAll (ou fetch)... ici on retourne avec PDO::FETCH_ASSOC seulement le tableau associatif au lieu d'avoir à la fois la version associative et numérique pour l'accès des colonnes (ce qui démultiplie le temps de récupération de la requête et la taille en mémoire)

    comme ça c'est plus propre et simple... tu as toujours un tableau avec toujours la même structure facile à analyser...

    ensuite ton tableau html ne se justifie que si il n'y a pas d'erreur d'où parfois la mauvaise idée de ne pas générer ça en pure php plutôt que de trop mixer html/php

    la génération du tableau des enfants donnerait alors:
    Code php : 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
    20
    <?php
    $sqlEnf="SELECT nomEnfant,  prenomEnfant, dateNaissance, nivScolaire 
                                FROM enfants
                                INNER JOIN salarie
                                ON enfants.idSalarie=salarie.idSalarie 
                                AND salarie.idSalarie=$idSalarie";
    $lignes=connexion->requeteSelection($sqlEnf);
    if(empty($lignes[error])
    {
        echo'<table><!-- insere ton entete de tableau  à la place de ce commentaire--><tbody>';
        for($i=0;$i<$ligne['count'];$i++)
            echo'<tr><td>'.$lignes['data'][$i]['nom'].
                  '</td><td>'.$lignes['data'][$i]['prenom'].
                  '</td><td>'.$lignes['data'][$i]['dateNaissance'].
                  '</td><td>'.$lignes['data'][$i]['nivScolaire'].'</td></tr>';
        echo'</tbody></table>';
    }
    else
        echo"<div>Une erreur c'est produite:{$lignes[error]}</div>";
    ?>

    j'ai l'impression que tu confonds aussi colonne et lignes dans ton tableau dans ton code, vu là où tu as mis le [$i]

    voilà je pense que ça devrait résoudre ton problème les les morceau de code que tu as donné...

    peut-être que cette méthodologie te fera mieux voir comment tu peux gérer un affichage de tableau ou d'erreur... à adapter à ce que tu veux très facilement ensuite

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Points : 116
    Points
    116
    Par défaut
    Merci pour toutes ces explications, C'est vrai que je suis pas encore très à l'aise avec le php et encore moins avec le PDO.
    J'ai eu quelques cours de php et comme ce sont les vacances j'ai pas envie de perdre le peu que j'ai appris.

    Quoi qu'il en soit je te remercie pour tes explications et ta patience

    Merci

    EDIT : c'est bon ça fonctionne nickel chrome

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [MySQL] Résultat de requête SQL différent entre PHP et phpMyAdmin
    Par djsid dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/12/2009, 11h22
  2. Réponses: 9
    Dernier message: 26/11/2008, 10h18
  3. [SQL] Protéger les requetes SQL d'injection comme du php, javascript, ect
    Par arnaudperfect dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/06/2007, 15h32
  4. probleme entre mysql et php
    Par jsdar dans le forum Outils
    Réponses: 4
    Dernier message: 02/03/2007, 00h06
  5. [SQL] Recupération Requete SQL dans un tableau dynamique PHP
    Par victor.jbju dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/09/2006, 16h48

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