奇怪的MYSQL / PHP错误:使用now()$i插入,因为时间戳偶尔会插入0

我发现了这个奇怪的问题.使用now()插入很好,但是在向now()添加数字时,它有时会插入0.它似乎是随机的.

这是查询

mysql_query("INSERT INTO action_data (user_id, value, create_time, site_id) VALUES (807809, 20, now()+$i, 409666)");

表:ENGINE = InnoDB AUTO_INCREMENT = 164865 DEFAULT CHARSET = latin1

mysql_version

+-------------------------+------------------------------------------+
| Variable_name           | Value                                    |
+-------------------------+------------------------------------------+
| innodb_version          | 1.0.13-11.6                              |
| protocol_version        | 10                                       |
| version                 | 5.1.52-rel11.6-log                       |
| version_comment         | Percona Server (GPL), 11.6, Revision 140 |
| version_compile_machine | x86_64                                   |
| version_compile_os      | unknown-linux-gnu                        |
+-------------------------+------------------------------------------+

我在一个循环中运行了100次,并且在时间0中插入了大约1/3的它们,其余的都很好.有人知道为什么会这样吗?

最佳答案 在这里猜测…但它似乎在数字上下文中(比如说,如果你在返回值中添加一个数字),NOW()会返回一个看起来像时间戳的数字(不是秒数!).比如,今天它可能会返回20120409161530.000000.现在……取决于$i的值,似乎这很容易造成无效值.我的意思是,如果它是666666怎么办?你最终会得到20120409828196.000000,这对于时间戳来说毫无意义……而且我很确定MySQL只是将无效值变为0.

您可能想要考虑NOW()INTERVAL $i SECOND之类的东西,并将$i重新定义为秒数(或分钟数,天数,甚至数年,如果您愿意……只需将SECOND更改为您决定的任何内容).由此产生的时间不太可能导致所有混乱.

点赞