Requete SQL : Comparer date sql à un DateTime PHP

Résolu
sluggy10 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
Fallentree Messages postés 2309 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   200
 
ç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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   200
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   209
 
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   Statut Membre Dernière intervention   200
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   209
 
bonjour, t'es sur du type de la date ?
0
sluggy10 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   209
 
essaie ... where DATEDIFF(USER_DEPART,'.$result.')>0
0
sluggy10 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   200
 
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   Statut Membre Dernière intervention   209
 
$today = date("Y-m-d H:i:s"); ça revient a faire CURTIME()

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