2013-10-16 88 views
0

我有一列,LAST_LOGIN型時間戳,用戶表中。結構:MySQL的 - 時間戳列不更新

CREATE TABLE IF NOT EXISTS `User` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `email` varchar(80) NOT NULL, 
    `username` varchar(80) NOT NULL, 
    `password` varchar(80) NOT NULL, 
    `facebook_login` varchar(3) NOT NULL DEFAULT 'no', 
    `facebook_id` varchar(50) NOT NULL, 
    `last_login` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ; 

我想在用戶使用當前時間戳登錄時更新它。我做的:

$sql = "Update User set last_login = ".time()." 
     Where id = :id"; 

$stmt = $db->prepare($sql); 
$stmt->bindParam("id", $user->id); 
$stmt->execute(); 

在MySQL日誌文件,我可以看到是越來越執行此查詢:

Update User set last_login = 1381949425 Where id = '1' 

但不知何故,它說:「沒有行受到影響」。這怎麼可能?另外還有一個與1號表用戶...

回答

3

我是一個MySQL的人,而不是一個PHP的人,但什麼是查詢應該事業上的MySQL一邊是這個(?):

ERROR 1292 (22007): Incorrect datetime value: '1381949425' for column 'last_login' at row 1 

時間戳列存儲他們的時代秒值,但他們期望的datetime文字,不是整數。

$sql = "Update User set last_login = FROM_UNIXTIME(".time().") 
    Where id = :id"; 

......或者......

$sql = "Update User set last_login = NOW() Where id = :id"; 

除非你有一個理由使用time()函數在您的應用程序,在MySQL中NOW()功能會做同樣的事情。

+2

'NOW()'是理想的答案 – Webnet