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 :

Erreur mysql_fetch_assoc() et JOIN [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 26
    Par défaut Erreur mysql_fetch_assoc() et JOIN
    Bonjour,

    Voilà, je ne suis franchement pas expérimenté avec les jointures, et là j'ai une erreur.
    Ce qui est curieux, c'est que la requète fonctionne bien dans phpMyAdmin...

    Voici le code de requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query_categories = "SELECT *, categories.nom AS catnom FROM catpas JOIN categories ON catpas.idcat = categories.id WHERE catpas.idpas = '".$row_pasapas['id']."'";
    $categories = mysql_query($query_categories, $$connectname) or die(mysql_error());
    $row_categories = mysql_fetch_assoc($categories);
    $totalRows_categories = mysql_num_rows($categories)
    J'ai vérifié que $row_pasapas['id'] est bien défini et a une valeur...

    L'affichage des résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php do {
    echo "| ".$row_categories['catnom']."&nbsp;";
    } while ($row_categories = mysql_fetch_assoc($categories)); ?>
    A ce stade, j'obtiens l'erreur suivante :
    mysql_fetch_assoc(): 7 is not a valid MySQL result resource

    J'ai également une erreur en fin de fichier suite au mysql_free_result
    mysql_free_result(): 7 is not a valid MySQL result resource

    ..comme si ma requète était mauvaise alors qu'elle tourne sous phpMyAdmin...

    Si quelqu'un sait éclairer ma lanterne
    Merci

  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
    C'est normal ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 26
    Par défaut
    Merci pour ta réponse ;
    oui, ça c'est normal
    ce n'est pas ce qui pose problème...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    Salut,

    ce qui est bizarre c'est qu'il dit que le nombre "7" n'est pas un id Mysql valide.. or tu assignes bien le resultat de la requête à $categories

    Et apparemment la requête est bien exécutée avec mysql_query () vu que le die(mysql_error ()) n'est pas déclenché...

    J'espère que ça pourra t'aider mais comme ça je n'ai aucune idée d'où peut venir le problème..

  5. #5
    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
    Moi a vu de nez, je dirais que c'est $$connectname qui vaut 7.
    Ca vaudrait le coup de faire un var_dump($$connectname);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 26
    Par défaut
    J'utilise $database et $$connectname pour simplifier la mise en place des sites centraliser la configuration de connexion ; des lignes en moins à mettre à jour, c'est toujours ça de pris

    Le var_dump donne ceci :
    resource(2) of type (mysql link)


    Bref, ceci dit, c'est vrai que ce 7 est bizarre.
    Juste au-dessus, j'ai cette requète qui fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mysql_select_db($database, $$connectname);
    $query_pasapas = "SELECT * FROM pasapas WHERE id ='".$_GET['id']."'";
    $pasapas = mysql_query($query_pasapas, $$connectname) or die(mysql_error());
    $row_pasapas = mysql_fetch_assoc($pasapas);
    $totalRows_pasapas = mysql_num_rows($pasapas);
    echo "TEST :".$row_pasapas['id'];
    la valeur de l'id sort bien, pour être utilisée dans la requète suivante.

    La différence entre les deux requètes, c'est que celle qui pose problème utilise une jointure ; c'est pour cela que j'orientais le sujet du post en ce sens...

    Dans les résultats (attendus) que me sort phpMyAdmin, le tableau affiche deux colonnes de nom identique présentant les id (clefs primaires) des deux tables jointes.
    La "table virtuelle" des résultats posséderaient ainsi deux clefs primaires ? C'est peut-être ça qui coincerait ?

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2005
    Messages : 357
    Par défaut
    Salut,
    C'est à cause des deux colonnes aux noms identiques que le fetch_array ne fonctionne pas. Evite d'utiliser "select *" quand tu fais des requêtes sur plusieurs tables qui possèdent des colonnes de même nom, nommes plusto exactement les colonnes que tu veux récupérer et s'il y en a des homonymes, fais des alias.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 26
    Par défaut
    ça ne marche pas, mais je m'y prends sans doute mal...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT catpas.id AS catpasid, catpas.idpas, catpas.idcat, categories.id AS catid, categories.nom AS catnom FROM catpas JOIN categories ON catpas.idcat = categories.id WHERE catpas.idpas = '".$row_pasapas['id']."'"
    Les tables sont structurées comme ceci :
    Table CATPAS, associant des articles (pas) à des catégories :
    - ID
    - IDCAT
    - IDPAS
    Table CATEGORIES, le nom de la categorie
    - ID
    - NOM
    La requète cherche le nom des catégories liées à un article.
    La jointure entre les tables se fait donc catpas.idcat = categories.id
    Et j'ai deux champs primaires id en tout.

    Mais je ne m'en sors pas (j'ai pas trop l'habitude des jointures disais-je...)

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    Sans vouloir me répéter, le die (mysql_error ()) n'est pas déclenché, donc ta requête a l'air d'être exécutée.. essaye de faire un echo de ta requête juste après le mysql_query et copie-colle dans phpmyadmin.

    Je pense que la vérité est ailleurs (dixit Mulder ).. fais des var_dump($$connectname) après chaque ligne de code, pour voir à quel moment elle passe de "resource(2) of type (mysql link) " au nombre 7.. du pas à pas en gros... c un peu lourd mais ton problème est fort bizarre aussi


    Et dans ton 1° post, tu dis que tu as les erreurs au niveau de l'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    do {
    echo "| ".$row_categories['catnom']."&nbsp;";
    } while ($row_categories = mysql_fetch_assoc($categories));

    Mais est-ce qu'il y en a à ce stade-là (le mysql_num_rows ($categories) p.ex.):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query_categories = "SELECT *, categories.nom AS catnom FROM catpas JOIN categories ON catpas.idcat = categories.id WHERE catpas.idpas = '".$row_pasapas['id']."'";
    $categories = mysql_query($query_categories, $$connectname) or die(mysql_error());
    $row_categories = mysql_fetch_assoc($categories);
    $totalRows_categories = mysql_num_rows($categories)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 26
    Par défaut
    essaye de faire un echo de ta requête juste après le mysql_query et copie-colle dans phpmyadmin
    d'après un 'echo', la requète $query_categories est correcte ; un résultat s'affiche dans phpMyAdmin.

    fais des var_dump($$connectname) après chaque ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_select_db($database, $$connectname);
    var_dump($$connectname);
    resource(2) of type (mysql link)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $categories = mysql_query($query_categories, $$connectname) or die(mysql_error());
    var_dump($categories);
    resource(4) of type (mysql result)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $row_categories = mysql_fetch_assoc($categories);
    var_dump($row_categories);
    array(5) {
    ["catpasid"]=> string(1) "8"
    ["idpas"]=> string(1) "4"
    ["idcat"]=> string(1) "5"
    ["catid"]=> string(1) "5"
    ["catnom"]=> string(16) "Métal Repoussé"
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $totalRows_categories = mysql_num_rows($categories);
    var_dump($totalRows_categories);
    int(1)

    Et il n'y a que les deux seules erreurs relevées :
    mysql_fetch_assoc(): 7 is not a valid MySQL result resource (à l'affichage des résultats)
    mysql_free_result(): 7 is not a valid MySQL result resource (à la libération des ressources)

    Je ne comprends vraiment pas ce qu'il se passe...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 26
    Par défaut
    Eureka !
    (voilà que je parle grec maintenant...)

    Effectivement, la vérité était ailleurs...

    en cherchant à comprendre pourquoi le dump de $categories passait de mysql_result à inconnu, je me suis rendu compte que la page faisait appel à une page distante pour le header, dans laquelle il y avait une requète de même nom ! Après le mysql_free_result de cette seconde requète, l'affichage des résultats de la première requète ne fonctionne plus (et aurait été faussé sinon...)

    Comment chercher midi à quatorze heures....

    Merci en tout cas pour votre aide, et j'aurai appris à faire usage des var_dump

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    Haaa ben voilà.. ça fait du bien avant de partir en WE

    Pense au

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

Discussions similaires

  1. #Erreur avec Left Join et Mid/InStr
    Par Bobble dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/03/2012, 15h29
  2. [MySQL] erreur mysql_fetch_assoc() une aide
    Par speedylol dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/01/2011, 13h22
  3. Erreur requete inner join
    Par l.laurent60 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 04/08/2010, 18h33
  4. [MySQL] Erreur : mysql_fetch_assoc()
    Par leff34 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/04/2009, 18h09
  5. Erreur FULL OUTER JOIN
    Par SwiTz dans le forum Requêtes
    Réponses: 14
    Dernier message: 02/04/2009, 13h33

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