我有一个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 ...
的用户答案 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()
函数将执行相同的操作。