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. Mais ça, c'est la ligne 37, non ?
    D'autre part, ne donne que les messages d'erreur du navigateur s'il te plaît. Je ne connais pas dreamweaver.
    La ligne telle que tu la donnes n'a aucune erreur de syntaxe PHP,
    Donne la dizaine de lignes qui précède, ça ne m'étonnerait pas que tu aies une chaine non fermée.
    1. oublie ce dernier message si c'est corrigé
  2. le père, Monsieur, le père !!! merci de ton opiniâtreté, je suis un peu comme çà, mais sans toi je n'aurais pas réussi
    1. stop stop
      je crois bien que c'est bon
      j'ai enlevé la parenthèse ici ( MONTH(date_saisie)
      avant MONTH
      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
        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
          1. Erreur de syntaxe près de '=
            Notice: Undefined variable: row_recordset1 in C:\Program Files' à la ligne 1
            Merci encore
            1. $query_Recordset1 = "SELECT * FROM stripbd WHERE ( MONTH(date_saisie)=".$_GET['m']." AND YEAR(date_saisie)=". $_GET['y']; ";"
              retire les 3 derniers caractères ";"
              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
                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.
                  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+
                    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);
                      
                      1. 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.
                        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
                          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
                        2. 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'];

                          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
                            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 ?
                              1. Bonjour

                                Enlève la parenthèse entre WHERE et MONTH : elle est inutile et tu oublies de la refermer.
                                1. merci de vos réponses
                                  malheureusement j'ai toujours la même erreur
                                  • 1
                                  • 2