这是我的SQL,用于在发出请求密码时插入当前时间。
$stmt2 = $pdo->prepare('UPDATE authsessions SET reset_req=now(), reset_req_uuid=:reset_uuid WHERE useruuid=:user_id');
这会引起混淆,因为它遵循服务器的时区来插入时间。
因此,在我的本地主机中,它会在我在页面中声明的时间插入亚洲/吉隆坡时间。但在亚马逊服务器中,我相信它会相应地插入GMT。但我想强制它在亚洲/吉隆坡插入时间。这是因为该网站意味着在马来西亚使用,并且没有使用GMT时间。
如何在插入前将now()转换为GMT 8+,请?
答案 0 :(得分:2)
您可以使用model.setRowCount(0);
转换语句中的时区(请参阅MySQL manual)。
答案 1 :(得分:0)
首先,它取决于您使用的MySQL字段。如果您使用TIMESTAMP
字段,它将作为UTC时间戳存储在数据库中。这是最简单的一个,因为您的php连接将使用本地服务器的时区。这样您就不必转换任何时区问题。
如果您使用的是DATETIME字段,它将按原样存储时间。 Mysql NOW()
将使用数据库时区设置,您可以在连接时覆盖设置:
SET time_zone = '+08:00';
您拥有的另一个选项是从PHP处理时区。例如:
$now = new DateTime('NOW', new DateTimeZone('Asia/Kuala_Lumpur'));
$stmt2 = $pdo->prepare('UPDATE authsessions SET reset_req=:now, reset_req_uuid=:reset_uuid WHERE useruuid=:user_id');
$stmt2->bindParam(':now', $now->format('Y-m-d H:i:s');