2012-04-09 42 views
4

我觀察到這個奇怪的問題。使用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倍在循環中以及關於它們的第一1/3ish被插入與時間0,其餘的都很好。任何人都知道爲什麼會發生這種情況?

+1

何時/你在哪裏初始化'$ i'? – mc10 2012-04-09 20:12:13

+0

「$ i」是如何填充/計算的? – hjpotter92 2012-04-09 20:13:34

+0

$我是for循環索引0-99,我認爲choao的答案是有道理的,我會試試 – user1322614 2012-04-09 20:32:41

回答

2

在這裏猜測...但它似乎在數值上下文(例如,如果您將一個數字添加到返回值),NOW()返回一個時間標記的數字(不是秒數!)。就像今天它可能會返回20120409161530.000000。現在...取決於$i的值,看起來這可能很容易導致無效值。我的意思是,如果它是666666?你會最終20120409828196.000000,這是沒有意義的時間戳...我敢肯定,MySQL的只是變成無效的值爲0。

你可能要考慮像NOW() + INTERVAL $i SECOND,並重新定義$i到是秒數(或者分鐘,幾天,甚至幾年,如果你喜歡的話......只要將SECOND更改爲任何你決定的)。你的結果時間不太可能導致所有混亂。

+0

你的猜測是正確的! – user1322614 2012-04-09 20:41:14