Requete SQL : Comparer date sql à un DateTime PHP

Résolu/Fermé
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014 - 27 août 2014 à 10:09
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 - 27 août 2014 à 12:05
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

Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
27 août 2014 à 10:27
ça affiche quoi ça ? Ca t'affiches bien ta date ?

var_dump($newDate->format('Y-m-d'));
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
27 août 2014 à 10:29
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.
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
27 août 2014 à 11:08
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
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
27 août 2014 à 11:13
Ca affiche bien tout en effet dans phpmyadmin
bizarre
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
27 août 2014 à 11:17
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...
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
Modifié par Fallentree le 27/08/2014 à 11:24
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 ...
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
27 août 2014 à 11:30
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.
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
27 août 2014 à 11:33
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.
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
27 août 2014 à 11:39
bonjour, t'es sur du type de la date ?
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
27 août 2014 à 11:42
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.
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
27 août 2014 à 11:48
essaie ... where DATEDIFF(USER_DEPART,'.$result.')>0
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
27 août 2014 à 11:53
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');
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
27 août 2014 à 11:53
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
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
27 août 2014 à 12:05
$today = date("Y-m-d H:i:s"); ça revient a faire CURTIME()

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