2017-10-21 82 views
0

J'ai une table avec colonne "données" dans varcharmysqli fonctionne pas avec la date php

enter image description here

et la valeur "21/10/2017"

enter image description here

Maintenant lorsque vous essayez une requête telle que:

$data = mysqli_real_escape_string($bd, date("j/m/y"));  
     $result = mysqli_query($bd, "SELECT * FROM tracking where data='".$data."'"); 

Cette requête renvoie 0, mais si changer les données avec une chaîne aléatoire comme "chien" et remplacer les données de mysql avec chien la requête fonctionne bien, mais j'ai besoin de la date pas le chien.

Si l'utilisation $data = "21//10//2017"; requête thw pourquoi?

+3

Peut-être le stocker comme un type de date et non varchar – Akintunde007

+0

C'est une chaîne normale, pourquoi si la chaîne égale "21/10/2017" ne fonctionne pas? et si ce n'est pas une date et est une série? J'ai besoin d'utiliser une date pour le numéro de série? –

+0

Si vous utilisez $ data = "21 // 10 // 2017"; Pourquoi la requête fonctionne-t-elle? –

Répondre

1

Je vois que vous utilisez j/m/y, selon date manuel y renvoie l'année avec les 2 derniers chiffres, pas 4 chiffres comme vous vous attendez, utilisez à la place Y.

Mais pour être honnête vous avez à stocker ce jour dans les date, datetime ou timestamp types, pas varchar.

+0

Merci beaucoup =) –

+0

@ user1598430 Vous l'avez donné trop facilement . L'Op n'a jamais pu voir que c'était le mauvais format en le déboguant en regardant la sortie. – TimBrownlaw

+0

@TimBrownlaw au moins il sait où est la documentation officielle. – user1597430

1

Vous utilisez le mauvais date format dans date. Vous obtenez la date j/m/y qui est au format d/mm/aa par exemple. 21/10/17 mais votre date/vos chaînes dans la base de données sont au format jj/mm/aaaa.

Pour obtenir les années dans la version complète à 4 chiffres, vous devez utiliser Y au lieu de y, à savoir

$data = mysqli_real_escape_string($bd, date("j/m/Y")); 

Note: Vous pouvez également les formats de mois et de jour mauvais - vous utilisez la en PHP (par exemple 1/01/17 au lieu du 01/01/17) mais vos chaînes peuvent utiliser les 2 chiffres complets - nous ne pouvons pas dire dans votre exemple de date ... dans ce cas vous aurez besoin:

$data = mysqli_real_escape_string($bd, date("d/m/Y")); 
+0

Et c'est juste une raison pour laquelle vous utiliseriez des dates au lieu de chaînes - vous n'avez pas à faire correspondre le format pour les rechercher. D'autres raisons sont que vous ne pouvez pas trier par date, rechercher des plages de dates, modifier le format d'un affichage international ou faire n'importe quoi avec la date autre que simplement l'afficher exactement comme il est. – FluffyKitten

+0

Merci beaucoup =) –

+0

@ J.DoeCd N'oubliez pas que votre format de jour et de mois peut aussi être faux, comme je l'ai mentionné dans ma réponse. Le format 'j/m/Y' fonctionnera pour le 21/10/2017 dans votre exemple mais il ne fonctionnera pas pour des dates comme 01/10/2017 – FluffyKitten