0

我有一个包含时间戳类型列 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 的用户...

4

1 回答 1

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() 函数,NOW()否则 MySQL 中的函数会做同样的事情。

于 2013-10-16T19:57:20.933 回答