Requete SQL : Comparer date sql à un DateTime PHP

Résolu/Fermé
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014
-
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
-
Hello hello tout le monde.
J'ai eu beau chercher sur pas mal de forums, je n'ai pas trouvé la réponse à ma question, des proches, oui, mais pas la même.
J'ai dans ma bdd un champs USER_DEPART pour mes utilisateurs, qui enregistre la date à laquelle un employé part de l'entreprise. Et je souhaiterai, dans mon agenda (qui s'affiche mois par mois pour tous les employés) que s'affiche son ancien agenda pour les mois ou il était encore là, et qu'à partir du mois ou il n'y est plus, eh bien, on ne l'affiche plus.
J'ai pour cela mon champ USER_DATE donc, date sql classique de type 2014-12-31, que je compare à la date de la page de l'agenda affichée :

$newDate = New DateTime(); 
$newDate->setDate($annee, ($mois+1), 31);

Théoriquement le même format donc.
Sauf que ma requête plante et m'affiche :
Catchable fatal error: Object of class DateTime could not be converted to string

Je comprends l'erreur, mais je ne vois pas comment faire autrement. Car si je le change en String avec

$result = $newDate->format('Y-m-d');


ça n'affiche juste... Rien
Voilà ma requête SQL

$reponse2 = $bdd -> query('SELECT *
FROM z_users, tbsystem
WHERE USER_EQUIPE=TBS_VALUE
AND TBS_NOMTABLE="EQUIPE"
AND USER_DEPART>'.$result.'
ORDER BY z_users.USER_EQUIPE');

Pour info, USER_DEPART est donc au format date sql avec comme valeur 2099-12-31 par défaut (donc devrait afficher l'intégralité de la table).

Je coince depuis hier soir. Help please, je paye en bonbons :D

14 réponses

Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
ça affiche quoi ça ? Ca t'affiches bien ta date ?

var_dump($newDate->format('Y-m-d'));
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

Yep ca m'affiche la bonne date en effet
string '2014-10-01'
La date que j'essaie de tester donc.
Sauf que ca n'affiche rien alors que c'est bien plus petit que 2099-12-31
Et c'est la que je bloque.
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
Ok, donc ton problème vient de ta query SQL alors.
As-tu essayé de valider sa syntaxe en testant via PhPMyAdmin la requête afin de débuguer au fur et a mesure ?
Avec les infos que tu donnes, on peux suppoer que ta query est :

SELECT *
FROM z_users, tbsystem
WHERE USER_EQUIPE=TBS_VALUE
AND TBS_NOMTABLE="EQUIPE"
AND USER_DEPART>2014-10-01
ORDER BY z_users.USER_EQUIPE
Essayes avec ça dans PhPMyAdmin et tu vas voir. Déjà, moi perso j'encadre toujours les dates avec des double quote :

SELECT *
FROM z_users, tbsystem
WHERE USER_EQUIPE=TBS_VALUE
AND TBS_NOMTABLE="EQUIPE"
AND USER_DEPART>"2014-10-01"
ORDER BY z_users.USER_EQUIPE
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

Ca affiche bien tout en effet dans phpmyadmin
bizarre
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

Parce que quand je teste en php
AND USER_DEPART>"2014-08-31"
Ca n'affiche rien.

Si ca continue je vais faire une SELECT * tout court, et trier après ce que j'affiche ou pas..
Je perdrais en mémoire cela dit...
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
205
la formule de comparaison de date est particulière c est pas une comparaison classique ...
Il faut regarder http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html
c'est pas de type string ...
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
Et en PhP, quand tu fais juste un "SELECT * FROM z_users, tbsystem", ça te renvoi des résultats ?
Si oui, ajoute au fur et a mesure les conditions et tu verras ce qui merde.
Sinon c'est que t'as un problème avec ta config pour ta connexion mysql dans PHP.
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

Oui oui en php j'ai les résultats que je veux avec toutes mes conditions tant que je ne cherche pas à sélectionner par rapport aux données de USER_DEPART. C'est ce paramètre qui merde.
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
205
bonjour, t'es sur du type de la date ?
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

Sur sql ou php?
SQL j'ai créé un champ au format date
donc année-mois-jour
Mis à 2099-12-13 par défaut.

php j'ai fait un newDate comme écrit plus haut.
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
205
essaie ... where DATEDIFF(USER_DEPART,'.$result.')>0
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

Oo cette requete qui sort tout droit de l'enfer...
donc, (le $result est bien ma date php on est d'accord?) ca doit donner un truc du genre niveau syntaxe?

$reponse2 = $bdd -> query('SELECT *
FROM z_users, tbsystem
WHERE USER_EQUIPE=TBS_VALUE
AND TBS_NOMTABLE="EQUIPE"
AND DATEDIFF(USER_DEPART>'.$result.')>0
ORDER BY z_users.USER_EQUIPE');
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
Et $bdd, tu l'instancies comment ?

Je me demande si tu ne pourrais pas avoir une conversion du format de date (comme ça peut se faire avec l'utilisation de mssql et selon la version de la librairie utilisée, j'ai déjà eule problème et il fallait inverser les jours et les mois...)

Quand tu n'as rien en retour as-tu essayé de voir si tu n'avais pas un message d'erreur en retour ?
Par exemple avec mysqli : https://www.php.net/manual/fr/mysqli.error.php
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
205
$today = date("Y-m-d H:i:s"); ça revient a faire CURTIME()

essaie ... where DATEDIFF(USER_DEPART,CURTIME())>0