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. #1
    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 requete SQL différente entre MySQL et php
    Bonjour a tous,

    J'ai 2 tables dans mysql,
    la première comporte une clé primaire "id" dans le seconde table j'ai une clé primaire et une clé étrangère "id". Les 2 "id" étant strictement identique.

    Lorsque je fais ma requête sql via phpadmin le retour de ma selection est tout a fait correcte, par contre lorsque je la fait via php je n'ai qu'un seul enregistrement et je ne comprends pas où se situe le problème

    ma requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM salarie INNER JOIN enfants ON 'enfants.idSalarie'='$idSalarie'";
    $idsalarie est obtenu après une recherche dans la table principale

    A partir de la requête je m'en sers pour afficher les données dans un tableau

    Pour le moment, pour voir ce ce que me retourne la reqête j'utilise un print_r

    Merci par avance pour l'aide que vous m'apporterai

    Bonne journée a tous

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Comme entre double quote, il y a évaluation des variables, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM salarie INNER JOIN enfants ON enfants.idSalarie=$idSalarie";
    Ensuite, je ne comprends pas trop bien
    Pour le moment, pour voir ce ce que me retourne la reqête j'utilise un print_r
    La requête va te retourner une ressource et non une chaine, tab, structure !

    Comment tu exploites cette requête ?

  3. #3
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Bonjour,

    la jointure marche plutot comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM salarie INNER JOIN enfants ON 'enfants.idSalarie'='salarie.idSalarie' WHERE salarie.idSalarie=$idSalarie";
    J'ai mis 'idSalarie' pour la table Salarie, mais note celle de ta clé primaire. Elle peut être 'id' tout simplement (de même dans la clause WHERE).

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Citation Envoyé par Nowwis Voir le message
    Bonjour,

    la jointure marche plutot comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM salarie INNER JOIN enfants ON 'enfants.idSalarie'='salarie.idSalarie' WHERE salarie.idSalarie=$idSalarie";
    J'ai mis 'idSalarie' pour la table Salarie, mais note celle de ta clé primaire. Elle peut être 'id' tout simplement (de même dans la clause WHERE).
    Non, non, non
    Bien qu'il soit possible de faire une jointure interne avec un WHERE , c'est une ancienne syntaxe et aujourd'hui on recommande plutôt d'utiliser JOIN

    La bonne syntaxe serait au final avec les alias et au plus propre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    "SELECT leNomDesChamps
    FROM salarie s
    INNER JOIN enfants e
    ON e.idSalarie = $idSalarie"
    Jamais SELECT * (enfin à éviter)

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Ou plus exactement, la bonne requête serait celle-ci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    WHERE s.idSalarie = $idSalarie

    Cette requête donnera les infos sur le salarié dont l'identifiant est donné par la variable $idSalarie et sur ses enfants.

    À noter que s'il n'a pas d'enfants, la requête ne retournera pas de résultat.
    Si vous voulez quand même les infos du salarié même s'il n'a pas d'enfants, il faut utiliser une jointure externe.

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    @cinephil
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    A cause de la variable tu utilises le Where ...

    Je ne suis pas d'accord, le Where, je l'utilise pour ensuite faire une projection de la jointure. Maintenant donnes moi les raisons et je serais d'accord avec toi


    Dans le cas de plusieurs jointures aussi, la dessus je suis d'accord.

  7. #7
    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
    Oula , je pensais pas ouvrir un débat avec ma question

    Quoi qu'il en soit je vais testé ce que vous me dite et je reviens vers vous pour vous donner le résultat

    Dans tous les cas, merci a tous pour votre aide


    Edit : Nickel ça marche à merveille
    Merci encore a tous pour votre aide
    bonne journée

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Fench, la condition de jointure s'opère entre deux colonnes des deux tables jointes. En principe, il s'agit de la clé primaire d'une table et de la clé étrangère de l'autre.

    Faire comme tu le fais revient à mélanger la condition de jointure et la condition de restriction. Ça marche (sous MySQL, les autres SGBD je ne sais pas) mais ce n'est pas propre.

    D'ailleurs, à la réflexion, je me demande si ne pas faire correctement la condition de jointure n'entraîne pas un produit cartésien des deux tables.

    Donnons une valeur à $idSalarie dans cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = 12

    Ne serait-elle pas équivalente à celle-ci ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s, enfants e 
    WHERE e.idSalarie = 12

  9. #9
    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
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Comme entre double quote, il y a évaluation des variables, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM salarie INNER JOIN enfants ON enfants.idSalarie=$idSalarie";
    Ensuite, je ne comprends pas trop bien

    La requête va te retourner une ressource et non une chaine, tab, structure !

    Comment tu exploites cette requête ?
    j'assigne à une variable la fonction mysql_fetch_assoc($sql)

  10. #10
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Fench, la condition de jointure s'opère entre deux colonnes des deux tables jointes. En principe, il s'agit de la clé primaire d'une table et de la clé étrangère de l'autre.
    Oui je suis d'accord

    Faire comme tu le fais revient à mélanger la condition de jointure et la condition de restriction. Ça marche (sous MySQL, les autres SGBD je ne sais pas) mais ce n'est pas propre.
    Bein non car la variable est un id, donc c une jointure simple (le produit cartésien comme tu dis), le where sera mis ensuite pour réduire cet ensemble.

    Donnons une valeur à $idSalarie dans cette requête :

    Code SQL :Sélectionner tout - Visualiser dans une fenêtre à part123 SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = 12
    Ne serait-elle pas équivalente à celle-ci ?

    Code SQL :Sélectionner tout - Visualiser dans une fenêtre à part123 SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s, enfants e
    WHERE e.idSalarie = 12
    Ici, tu fais nouvelle méthode (la recommandée) et ancienne méthode qui marche aussi.

    Maintenant, différences sur les deux

  11. #11
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Citation Envoyé par stefano Voir le message
    j'assigne à une variable la fonction mysql_fetch_assoc($sql)
    Oui c'est Ok, j'avais juste peur qd tu disais
    Pour le moment, pour voir ce ce que me retourne la reqête j'utilise un print_r
    Donc rien à dire

  12. #12
    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
    Je viens d'essayer les requêtes avec et sans le WHERE

    Avec le WHERE, seul les enregistrements concerner par l'égaliter sont retournés
    Si je prends la version sans le WHERE, c'est l'ensemble des données des 2 table qui me sont retournés

  13. #13
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Oui,

    Si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    tu auras l'ensemble des deux tables

    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    WHERE s.idSalarie = $idSalarie
    tu auras une restriction à ceux qui correspondent à l'égalité

    MAIS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = $idSalarie
    à tester

    [edit] oui bon la meilleur méthode est la deux désolé à tous
    car pour la mienne je pensais trop Doctrine qui lors d'une jointure prend en considération les liens et donc pas besoin du ON, bon ça coute rien de tester qd même.

  14. #14
    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
    French,

    effectivement ça donne la même chose j'avais tu me faire une faute de frappe tout à l'heure )

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Si ça fonctionne tant mieux pour toi mais sûrement pas tel que tu le présentes !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM salarie INNER JOIN enfants ON enfants.idSalarie=$idSalarie";
    $sql est ici une simple chaîne de caractères.

    j'assigne à une variable la fonction mysql_fetch_assoc($sql)
    Faire un mysql_fetch_assoc sur une chaîne de caractères devrait te renvoyer une belle erreur !

    Il manque un mysql_query entre les deux !

    Donc le bon code devrait être celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql = "
    	SELECT -- les colonnes nécessaires et pas étoile !
    	FROM salarie s
    	INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    	WHERE s.idSalarie = $idSalarie
    ";
     
    $result = mysql_query($sql);
     
    $row = mysql_fetch_assoc($result);
    Citation Envoyé par Fench
    je pensais trop Doctrine
    Eh oui ! L'enDoctrinement a souvent fait des ravages dans l'Histoire humaine et il continue d'en faire !

  16. #16
    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
    salut,

    @fench, là je soutiens cinephil sans problème... va falloir que tu relises mieux tes cours de sgbd...

    ou mieux, autres que ceux de la fac ou des écoles d'ingénieurs qui utilisent encore des notations et présentations des choses comme avant 1992... (vu le nombre d'étudiants qui ne connaissent pas les opérateurs de jointure modernes, enfin si depuis la norme de 1992 on peut appeler ça moderne...)

    attention, comme tu le vois le formalisme, parfois mal appliqué, ça tue

    une seule erreur de la part de cinephil (mais je pense qu'il a dit ça au vu du cas ici), c'est que la jointure n'est pas restreinte à une condition sur 1 seule colonne commune à chaque table en jeu...



    le principe d'une jointure est de ne pas arrivé au cas dégénéré du produit cartésien... sauf si tu fais du "cross join" qui est le produit cartésien, bien sur...

    le principe de la jointure thêta, ancien nom des jointures (pour les diférencier du produit cartésien car tu appliques une condition thêta) est d'obtenir une restriction des jeu de données, grâce à des sélection via les conditions, avant l'application du produit cartésien et non après... ce qui n'induirait aucune optimisation...

    et, pour rectifier une autre bêtise, c'est la partie entre select et from qui est la project, car c'est select qui est l'opérateur du projection...

    @stefano... passe à pdo pour te connecter à mysql car le jour où ils vont virer mysql et mysqli comme connecteurs, ton application va planter net!!!

    et faites gaffe à `` qui sert à encadrer le noms d'entités sql (table, bd, etc...) et '' qui encadre une chaine de caractères... y a eu un méchant flottement à un moment et le sgbd lui ne pardonnera pas la confusion...


    comme tu as un inner join tu peux faire sauter le where avec:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie and e.idSalarie = $idSalarie
    attention si tu utilise "on" la condition de jointure doit être complètement donnée

  17. #17
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Salut à tous,

    Pour Eric, non je n'ai pas besoin de relire mes cours et je pense que tu as pas tout lu dans les réponses, merci à toi de les relires, vlan,

    Bon ça c'est pour le premier réglement de compte

    Sinon,
    le principe d'une jointure est de ne pas arrivé au cas dégénéré du produit cartésien... sauf si tu fais du "cross join" qui est le produit cartésien, bien sur...

    le principe de la jointure thêta, ancien nom des jointures (pour les diférencier du produit cartésien car tu appliques une condition thêta) est d'obtenir une restriction des jeu de données, grâce à des sélection via les conditions, avant l'application du produit cartésien et non après... ce qui n'induirait aucune optimisation...
    Pour résumer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Produit cartésien
    SELECT CLI_NOM, TEL_NUMERO
    FROM T_CLIENT C, T_TELEPHONE T
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Jointure
    SELECT CLI_NOM, TEL_NUMERO
    FROM T_CLIENT C, T_TELEPHONE T
    WHERE C.CLI_ID = T.CLI_ID
    OU voir version 2 que je disais bonne avec le inner join + on
    Tu as vu, je sais donc encore lire des cours

    et, pour rectifier une autre bêtise, c'est la partie entre select et from qui est la project, car c'est select qui est l'opérateur du projection...
    Bon là, je suis d'accord, j'ai confondu la projection et la sélection à cause du select sans doute donc erreur de ma part, 'sélection' si si je reconnais que j'en ai le droit aussi

    Et enfin, j'aime pas ta version du AND, ça c parceque tu m'as énervé ...


  18. #18
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Et enfin, j'aime pas ta version du AND
    Moi non plus !
    Je préfère séparer la condition de jointure de la condition de restriction, sauf bien sûr en cas de restriction sur la table externe d'une jointure externe.

  19. #19
    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
    même pas mal
    j'ai un casque casque lourd et un casque de chantier au pire moins bon contre les marteaux mais bon...

    j'ai pas dit ça méchamment

    l'opérateur ',' c'est le mal dans from comme '*' dans select...

    lis la doc mysql pour t'en convaincre...

    il vaut mieux toujours employer un opérateur de jointure explicite qui garantit que le lecteur humain et l'interpréteur comprennent bien ce que tu veux faire et ne pas compter sur les risques d'un changement d'interprétation d'un sgbd à l'autre...

    et entre nous mois non plus j'en suis pas fan car ça enlève la lisibilité de où s'applique la restriction...

    mais c'est pas moi qui veut faire des inner join sans where, le but c'est pas de minimiser la longueur, l'optimiseur est la pour ça, mais d'écrire des trucs facilement maintenable et produisant quand même la requête la plus efficace

    ici tu peux le faire sans soucis car la restriction s'applique à la condition de jointure directement, ça garde un sens... mais ça reste un cas particulier...

    il vaut mieux en effet ne mettre dans le on que ce qui restreint la table externe...

  20. #20
    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
    Bonjour a tous,

    Je reviens vers vous car j'ai toujours un problème avec php et Mysql

    Dans ma table "Enfants" j'ai 3 enregistrements pour un même salarié hors lorsque je veux affichié le résultat dans un tableau il me ressort bien 3 enregistrement sauf que c'est le même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
             $sqlEnf="SELECT nomEnfant,  prenomEnfant, dateNaissance, nivScolaire 
                                FROM enfants
                                INNER JOIN salarie
                                ON enfants.idSalarie=salarie.idSalarie 
                                AND salarie.idSalarie=$idSalarie";
     
     $reqEnf=$connexion->requeteSelection($sqlEnf);
                    $infoEnf=$reqEnf->fetch();
                    $lignesTotalRecu=$reqEnf->rowCount();
    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
     
    function requeteSelection($requete){
            try {
                if($this->connexionActive() == false) {
                    return null;
                } else {
                    $this->donnees = $this->connexion->query($requete);
                    return $this->donnees;
                }
            }
            catch(PDOException $e) {
                echo "Echec lors de l'execution de la requete : ".$e->getMessage();
                return null;
            }
        }
    et le bout de code pour remplir le tableau

    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
    20
    21
    22
    23
    24
    25
     
    <tbody>
                  <tr>
                       <?php
    	              $donnees=array();
    	              $i=0;
     
                               while ($i<$lignesTotalRecu ){
     
                                   $donnees['nom'][$i]=$infoEnf['nomEnfant'];
    	                  $donnees['prenom'][$i]=$infoEnf['prenomEnfant'];
                                   $donnees['dateNaissance'][$i]=$infoEnf['dateNaissance'];
                                   $donnees['nivScolaire'][$i]=$infoEnf['nivScolaire'];
     
                                      echo '<td>' .$donnees['nom'][$i].
                                      '</td><td>'.$donnees['prenom'][$i].
                                      '</td><td>'.$donnees['dateNaissance'][$i].
                                      '</td><td>'.$donnees['nivScolaire'][$i].'</td>';
     
                                      $i ++;
                              }
     
                         ?>   
                  </tr>
    </tbody>


    Si vous pouvez me dire ou je me plante car je sèche


    Merci par avance

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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