Mysql - 时间戳列未更新

时间:2013-10-16 19:01:04

标签: mysql sql

我有一个User表,其中包含timestamp类型的列last_login。结构:

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'

但不知何故,它说“没有行影响”。这怎么可能?表中有一个id为1 ...

的用户

1 个答案:

答案 0 :(得分:3)

我是一个MySQL人,而不是PHP(?)人,但是应该在MySQL端引起的问题是:

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

时间戳列将它们的值存储在纪元秒中,但它们需要日期时间文字,而不是整数。

$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()函数将执行相同的操作。