【发布时间】:2023-03-22 03:53:01
【问题描述】:
所以我在 MySQL 中有一个简单的查询,它会在新成员缴纳会费后设置他们的到期日期:
UPDATE members SET joined=CURDATE(), expires=DATE_ADD(CURDATE(), INTERVAL 1 YEAR), active='1' WHERE id=1000
此查询已运行 200 多次,通常结果正确 - 当前日期放在连接字段中,从该日期起一年后放在 expires 字段中。但是,在大约 10 个实例中,过期日期被设置为 00-00-0000,没有明显的解释。我每次都开始将查询写入文本文件,以确保语法正确并且我没有遗漏任何内容 - 我没有 - 这正是每个查询的那个查询(只有 ID 不同),那些工作,以及那些没有。
我唯一能想到的就是 MySQL 的 DATE_ADD 函数一定有问题。有没有其他人经历过这样的事情?
更新: 我应该补充一点,在过期日期不正确的情况下,加入的字段与当前日期是正确的。
- 我使用的是 MySQL 5.0.81。
- 没有触发器。
- 该表正在使用 MyISAM。
重要更新: 我是个白痴——当我说 11-30-1999 时,这实际上并不是数据库中的内容。我心不在焉地写了这个,但实际上数据库包含的值 00-00-0000 - 11-30-1999 正是 PHP 将它呈现到我的页面上的方式。对此感到抱歉,希望这将使这个问题不那么难以解决。
【问题讨论】:
-
能否请您为不正确的行发布
joined的值? -
是的 - 最近的两个同时发生。实际上,joined 仅存储日期(均为“8-4-05”),但该行是在此查询运行之前创建的,并且带有时间戳 - “2009-08-04 22:38:20”。另一个是在此之后几秒钟。