奇怪的MYSQL / PHP错误:插入now()+ $ i作为时间戳偶尔插入0

时间:2012-04-09 20:10:09

标签: php mysql database innodb

我发现了这个奇怪的问题。插入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的它们,其余的都很好。有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

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

您可能需要考虑NOW() + INTERVAL $i SECOND之类的内容,并将$i重新定义为秒数(或分钟数,天数,甚至数年,如果您愿意...只需更改SECOND无论你做出什么决定)。由此产生的时间不太可能导致所有混乱。