Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème requête avec INNER JOIN

Sujet résolu
    2 février 2024 à 16:45:55

    Bonjour,

    C'est mon premier essai de requête sur deux tables, essai infructueux pour lequel une aide serait la bienvenue.

    Ma première table, nommée "table_baia" contient les inscriptions des membres à des évènements, avec entre autre les champs "id_evenement", "date", "evenement", "membre" (pseudo) , "id_membre", "nbre_participants"

    La seconde table nommée "membres" à entre autre les champs "id" et "nom"

    Pour un évènement donné je souhaite pouvoir lister les membres inscrits avec leurs noms, pseudos et nombre de participants, il me faut donc aller chercher le nom dans la table "membres" avec les champ communs "id_membres" de la table "table_baia" et "id" de la table "membres".

    Voici ma requête

    $sql = "SELECT b.date, b.evenement, b.membre, b.nbr_participants, a.nom
    		FROM table_baia b WHERE id_evenement = $id 
    		INNER JOIN membres a ON b.id_membre = a.id ORDER BY nom ASC";
    		$req = $bdd->query($sql) or die(print_r($bdd->errorInfo()));
    		while ($a = $req->fetch()){	
    
    		echo "$a[nom] $a[membre] $a[nbr_participants]"; }

    $id est transmis par GET


    J'obtiens l'erreur suivante

    Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN membres a ON b.id_membre = a.id ORDER BY nom ASC' at line 3 ) 1

    • Partager sur Facebook
    • Partager sur Twitter
      2 février 2024 à 23:49:59

      Il n'y a rien qui te choque ? Le WHERE ne se met pas après les jointures par hasard ?

      > $id est transmis par GET

      Et une injection SQL.

      • Partager sur Facebook
      • Partager sur Twitter
        3 février 2024 à 10:51:25

        Bonjour,

        Merci d'avoir pris le temps de me répondre.

        Comme précisé c'était la première fois que j'utilisais cette fonction et dans mes recherches pour la comprendre je n'avais rien vu concernant le positionnement du WHERE, maintenant je sais et ça marche beaucoup mieux, même très bien.

        Pour le GET je teste quand même la valeur reçue si elle entre dans une fourchette de valeur possible. 

        • Partager sur Facebook
        • Partager sur Twitter
          3 février 2024 à 11:20:49

          Les SGBD ont tous une doc où l'on peut retrouver la syntaxe : https://dev.mysql.com/doc/refman/8.0/en/select.html

          > Pour le GET je teste quand même la valeur reçue si elle entre dans une fourchette de valeur possible.

          Ce n'est pas pour autant que ça te garantit de ne pas en avoir (s'il y a cast en implicite en int sur tes tests mais que tu réutilises $_GET['id'] derrière).

          Et puis, je ne comprends pas, ici, à chaque fois que je dis ça, on me sert une excuse bidon pour ne pas préparer la requête. Ca vous coûte quoi de préparer une requête ? Absolument rien alors que c'est la seule façon correcte de vous prémunir à 100% de toute injection SQL. Ca me dépasse. Bref, ce n'est pas mon problème, je vais aller prendre ma tisane.

          (ne parlons pas du or die, mauvais pratique, ou encore des possibles XSS faute de htmlspecialchars sur l'echo)

          -
          Edité par julp 3 février 2024 à 11:39:32

          • Partager sur Facebook
          • Partager sur Twitter

          Problème requête avec INNER JOIN

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown