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 -
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 :
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
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
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
A voir également:
- Sql comparaison date
- Comparaison million milliard - Accueil - Technologies
- Airpods 3 date de sortie - Guide
- Jm date désabonnement - Forum Gmail
- Publipostage date inversée - Forum Word
- Jm date resiliation ✓ - Forum Consommation & Internet
14 réponses
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.
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.
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 :
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 :
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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...
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 ...
Il faut regarder http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html
c'est pas de type string ...
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.
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.
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.
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.
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.
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');
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');
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
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