8768 sujets

Développement web côté serveur, CMS

salut à tous, je me pose une question, dans une requête Mysql , si je créé une variable dans ma requête, est ce que je peux l'utiliser comme condition, comme dans l’exemple ci-dessous?


 $gite = $_POST['giteVal'];  
 $an   = (int)$_POST['anVal']; 
    

  $sql = "SELECT *, DATE_FORMAT(reserved_at, '%Y') AS year_only
          FROM `$tablename` 
          WHERE `gite_res`= '$gite' AND year_only ='$an'";



$an est une année, numérique: 2020,2021, ...etc
reserved_at est un champ de la table au format date: style ... 2020-03-19

Je veux donc comparer $an avec la valeur de l'année extraite depuis la date mysql directement dans la requête, et ça ne marche pas.

Si je supprime la condition AND year_only ='$an' , la requête fonctionne correctement et j'obtiens bien year_only dans les résultats
Modifié par lionel_css3 (13 Mar 2020 - 16:30)
J'ai trouvé une solution...
C'est le code d'un projet existant et il se trouve que lorsque je créais les enregistrements dans la table, en plus de stocker le champ reserved_at au format date de Mysql je créais aussi un champ date_res au format varchar représentant la date au format français, pour l'avoir direct après dans les résultats de requêtes -- même si ça contredit les recommandations des puristes -- : 20/12/2015 par exemple. Donc la date existe en tant que texte et j'ai donc modifié ma requête comme ci dessous et ça fonctionne parfaitement:
($an reste du texte, plus forçage avec (int) )


$gite = $_POST['giteVal'];  
$an   = $_POST['anVal'];  
  
$sql = "SELECT *
        FROM `$tablename` 
        WHERE `gite_res`= '$gite' AND SUBSTRING(date_res, 7, 4) = '$an'";


Mais je reste ouvert à vos remarques....
Modifié par lionel_css3 (14 Mar 2020 - 10:28)
Meilleure solution