2009-08-13 12 views
1

Excuses si cela a déjà été répondu à plusieurs reprises, mais j'ai été incapable de trouver la réponse et j'ai été décollé.php/mysql - date_format et la partie de temps

J'ai une requête mysql qui produit apparemment le résultat que je veux quand je l'exécute dans la base de données - cependant lorsque je lance la requête via PHP, elle ne sort pas correctement.

Dans la base de données, les dates sont enregistrées comme:

2009-08-13T00:00:00 

Ce que je veux faire est affiche pas de données qui est plus ancienne que la date d'aujourd'hui. Ainsi, dans la clause where faire:

 WHERE dateField1 >= DATE_FORMAT(now(),'%Y-%m-%d') AND dateField2 >= DATE_FORMAT(now(),'%Y-%m-%d') 

Mon intention est de dépouiller la partie, comme je luttais pour trouver un moyen de convertir la partie de temps maintenant() à minuit.

Cela semble fonctionner quand je l'exécute sur PHPMyadmin, mais quand je lance le script PHP, ce n'est pas le cas.

Des idées?

Merci beaucoup!

+0

Pouvez-vous ajouter - ou mourir (mysqli_error ($ link) à votre requête mysqli?) – Dirk

+0

@Lyndsey - Si cela résout votre problème, veuillez cocher la réponse – karim79

Répondre

1

Cela semble fonctionner quand je l'exécute sur PHPMyadmin, mais quand je lance le script PHP, ce n'est pas le cas.

Vous n'utilisez pas quelque chose comme sprintf pour construire la chaîne êtes-vous? Si oui, vous avez besoin d'échapper à la % avec un autre %

Dans tous les cas, vous pouvez utiliser la fonction DATE()

WHERE `dateField1` > DATE(NOW()) 
+0

(Elle a le visage rouge) Vous avez raison, vous avez raison. L'utilisation de DATE (MAINTENANT()) est considérablement plus facile - merci! –

0

nickf est juste. Je suis d'accord avec ça.

En cas d'utilisation sprintf() pour faire un appel SQL, vous pouvez transformer votre requête en ceci:

$query = sprintf("SELECT * FROM SOME_TABLE WHERE id=%s AND dateField1 >= DATE_FORMAT(now(),'%%Y-%%m-%%d') AND dateField2 >= DATE_FORMAT(now(),'%%Y-%%m-%%d')", $id); 
//Then submit $query for SQL query processing... 

PHP voir% comme spécificateur de type lors de l'utilisation sprintf().

Pour éviter cela, vous devez ajouter un% de plus devant la chaîne de formatage MySQL, c'est-à-dire, %% Y ou %% m ou %% d. La sortie réelle vers la requête MySQL deviendrait% Y ou% m ou% d à nouveau.