2013-10-16 69 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