我发现了这个奇怪的问题.使用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更改为您决定的任何内容).由此产生的时间不太可能导致所有混乱.