Erreur de syntaxe php sql

Résolu
Bonjour,
j'ai une erreur syntaxe avec cette requête:
SELECT * FROM stripbd WHERE ( MONTH(date_saisie)=".$_GET['m']."  AND YEAR(date_saisie)=". $_GET['y'];

Avez-vous une idée
Merci

23 réponses

Résumé de la discussion

Une série d'échanges porte sur une erreur de syntaxe dans une requête SQL filtrant par mois et année à partir de la colonne date_saisie, avec des fragments PHP mal concaténés via $_GET. Les réponses successives suggèrent de fermer les parenthèses, d'enlever les parenthèses superflues, de corriger les guillemets et de vérifier l'ordre des concaténations, tout en évitant les erreurs de variable. Des propositions alternatives utilisent une construction de date et une clause LIKE, ou encore une répartition des vérifications entre MONTH et YEAR, sans conclure ni offrir de solution définitive.

Bobot (l’IA à votre service)
  1. Bonjour

    Enlève la parenthèse entre WHERE et MONTH : elle est inutile et tu oublies de la refermer.
    1
    1. Tu pourrais mettre ta requête Php SQL entièrement ?
      0
      1. j'ai le message : Erreur de syntaxe près de ". $_GET['y'];
        je ne vois pas ce que je peux mettre d'autre , la requête est entière
        0
        1. Salut,

          Essaye avec :
          $requete = "SELECT * FROM stripbd WHERE ( MONTH(date_saisie)='".$_GET['m']."'  AND YEAR(date_saisie)='". $_GET['y']."'";

          0
          1. merci de vos réponses
            malheureusement j'ai toujours la même erreur
            0
            1. toujours la même erreur
              0
              1. Peux-tu nous donner les quelques lignes de script qui précèdent, jusqu'à celle là incluse ? ET fait un copier-coller du message exact ?
                0
                1. voilà le projet complet
                  j'ai extrait sur une première page la totalité des enregistrements classés par mois.
                  J'ai une base avec les données suivantes succinctes :
                  Id date saisie titre
                  1 2011-04 01 chochotte
                  2 2011-04-04 tentative
                  3 2011-03-11 bath
                  Sur une page stripbd.php j'ai crée une requête sql
                  SELECT DISTINCT MONTH(date_saisie) AS mois, YEAR(date_saisie) AS annee
                  FROM stripbd
                  GROUP BY mois, annee
                  

                  Je veux à ce niveau avec group by ceci: le mois 4 groupé
                  Mois année voir
                  3 2011 voir
                  4 2011 voir
                  Sur le lien voir j'ai créé un lien suivant pour afficher les enregistrements de chaque mois sur une autre page:
                  essaibd.php?m=<?php echo $row_recordset1['mois']; ?>&y=<?php echo $row_recordset1['annee']; ?>

                  Sur cette seconde page , J'ai un problème pour extraire dans ma requête sql
                  tous les enregistrements identiques portant sur le mois 04, il ne faut plus qu'ils soient groupés.
                  SELECT * FROM stripbd WHERE ( MONTH(date_saisie)=".$_GET['m']."  AND YEAR(date_saisie)=". $_GET['y'];

                  cette dernière requête ne fonctionne pas: Erreur de syntaxe près de ". $_GET['y'];
                  Merci de s'intéresser à mon problème
                  0
                  1. Bonjour,

                    Tu as toujours une parenthèse ouverte qui ne se ferme jamais et tu as un espace inutile entre YEAR(date_saisie)=". et $_GET['y'];

                    Pour être correct, ta requête doit ressembler à ça :
                    SELECT * FROM stripbd WHERE MONTH(date_saisie)=".$_GET['m']."  AND YEAR(date_saisie)=".$_GET['y'];

                    0
                    1. Parse error: parse error in C:\Program Files\EasyPHP5.3.0\www\lucie1\essaibd.php on line 38 dans le navigateur

                      et Erreur de syntaxe près de ". $_GET['y'];
                      avec dreamweaver
                      0
                      1. Juste une question, est-ce que tu appelles ta requête SQL dans une variable ?

                        Edit : Je viens de voir que tu n'as pas retirer l'espace entre le . et ton $_GET
                        0
                    2. Je répète : Peux-tu nous donner les quelques lignes de script qui précèdent, jusqu'à celle là incluse ? Et quelle est la ligne 38 ?
                      Ça ne m'étonnerait pas que l'erreur vienne d'avant.
                      0
                      1. mysql_select_db($database_cnx, $cnx);
                        $query_Recordset1 = "SELECT * FROM stripbd WHERE MONTH(date_saisie)=".$_GET['m']."  AND YEAR(date_saisie)=".$_GET['y'];";"
                        $Recordset1 = mysql_query($query_Recordset1, $cnx) or die(mysql_error());
                        $row_Recordset1 = mysql_fetch_assoc($Recordset1);
                        $totalRows_Recordset1 = mysql_num_rows($Recordset1);
                        
                        0
                        1. Bonjour,

                          Et comme ça, c'est pas plus simple?

                          $xdate = $_GET['y']."-".$_GET['m'];
                          $sql = "SELECT * FROM stripbd WHERE date_saisie Like '$xdate%'";


                          A+
                          0
                          1. On verra la requête plus tard, pour l'instant elle n'est même pas soumise à mysql à cause de la parse error.
                            Tu as un ";" qui traîne à la fin de ta requête, mais il doit y avoir autre chose, car il produit un message d'erreur différent de celui que tu as annoncé.
                            Et pourquoi ne veux-tu pas répondre à toutes les questions ? Si on ne sait pas quelle est la ligne 38 (celle du message d'erreur, ça fausse l'analyse.
                            0
                            1. mysql_select_db($database_cnx, $cnx);
                              $query_Recordset1 = "SELECT * FROM stripbd WHERE ( MONTH(date_saisie)=".$_GET['m']."  AND YEAR(date_saisie)=". $_GET['y']; ";"
                              $Recordset1 = mysql_query($query_Recordset1, $cnx) or die(mysql_error());
                              $row_Recordset1 = mysql_fetch_assoc($Recordset1);
                              $totalRows_Recordset1 = mysql_num_rows($Recordset1);
                              

                              ligne 38:
                              $Recordset1 = mysql_query($query_Recordset1, $cnx) or die(mysql_error());


                              Parse error: parse error in C:\Program Files\EasyPHP5.3.0\www\lucie1\essaibd.php on line 38
                              0
                              1. $query_Recordset1 = "SELECT * FROM stripbd WHERE ( MONTH(date_saisie)=".$_GET['m']." AND YEAR(date_saisie)=". $_GET['y']; ";"
                                retire les 3 derniers caractères ";"
                                0
                                1. Erreur de syntaxe près de '=
                                  Notice: Undefined variable: row_recordset1 in C:\Program Files' à la ligne 1
                                  Merci encore
                                  0
                                  1. Est-ce à dire que tu as maintenant une erreur dès la 1ère ligne ???
                                    Pour ta variable non définie, fais attention : $row_recordset1 et $row_Recordset1 ça n'est pas la même chose
                                    0
                                    1. $query_Recordset1 = "SELECT * FROM stripbd WHERE ( MONTH(date_saisie)=".$_GET['m']." AND YEAR(date_saisie)=". $_GET['y'];
                                      

                                      Erreur de syntaxe près de '' à la ligne 1
                                      sans les 3 derniers caractères
                                      0
                                      1. stop stop
                                        je crois bien que c'est bon
                                        j'ai enlevé la parenthèse ici ( MONTH(date_saisie)
                                        avant MONTH
                                        0
                                        • 1
                                        • 2