2009-08-12 10 views
2

J'ai une simple requête dans MySQL qui définit une nouvelle date d'expiration de membre une fois qu'ils paient leurs cotisations:MySQL DATE_ADD - la date est erronée?

UPDATE members SET joined=CURDATE(), expires=DATE_ADD(CURDATE(), INTERVAL 1 YEAR), active='1' WHERE id=1000 

cette requête a exécuter plus de 200 fois, normalement avec le résultat correct - la date actuelle est mettre dans le champ joint, et un an à partir de cette date dans le champ d'expiration. Cependant, dans environ 10 cas, la date d'expiration a été fixée à 00-00-0000 sans explication évidente. J'ai commencé à écrire la requête dans un fichier texte à chaque fois pour m'assurer que la syntaxe était correcte et que je n'avais rien manqué - et je ne l'ai pas fait - c'est exactement cette requête (avec seulement l'ID qui varie) et ceux qui ne le font pas.

La seule chose que je peux penser ici est qu'il doit y avoir un problème avec la fonction DATE_ADD de MySQL. Est-ce que quelqu'un d'autre a vécu quelque chose comme ça?

MISE À JOUR: Je dois ajouter que le champ joint est correct avec la date actuelle dans les cas où la date d'expiration est incorrecte.

  • J'utilise MySQL 5.0.81.
  • Il n'y a pas de déclencheurs.
  • La table utilise MyISAM.

MISE À JOUR IMPORTANTE: Je suis un idiot - quand je dis le 11-30-1999 ce n'est pas réellement ce qui est dans la base de données. J'ai distraitement écrit cela, mais en fait la base de données contient la valeur 00-00-0000 - 11-30-1999 est juste comment il est rendu par PHP sur ma page. Désolé à ce sujet, j'espère que cela rendra ce problème moins difficile à comprendre.

+0

Pourriez-vous s'il vous plaît afficher les valeurs de 'joined 'pour les lignes incorrectes? – Quassnoi

+0

Oui - les deux derniers sont arrivés en même temps. joined n'enregistre réellement que la date (les deux sont '8-4-05') mais la ligne est créée juste avant que cette requête ne soit exécutée, et elle est horodatée - '2009-08-04 22:38:20'. L'autre est quelques secondes après cela. – Joel

Répondre

0

Juste une pensée .... ces "mauvaises" dates n'étaient pas des dates d'années bissextiles ont-elles ... le 29 février par exemple?

Cela ne devrait pas avoir d'importance, mais cela peut être un bug.

+0

Non, les nouveaux enregistrements créés ont une date actuelle (juillet/août 2009) et expirent en 2010. – Joel

Questions connexes