如何在PHP中将MYSQL TIMEZONE更改为GMT格式,如此函数: / SET GMT TIMEZONE / date_default_timezone_set( 'ETC / GMT');
我的数据库课程在这里:
class DB {
private static $instance;
private $MySQLi;
private function __construct(array $dbOptions){
$this->MySQLi = @ new mysqli( $dbOptions['db_host'],
$dbOptions['db_user'],
$dbOptions['db_pass'],
$dbOptions['db_name'] );
if (mysqli_connect_errno()) {
throw new Exception('Database error.');
}
$this->MySQLi->set_charset("utf8");
}
public static function init(array $dbOptions){
if(self::$instance instanceof self){
return false;
}
self::$instance = new self($dbOptions);
}
public static function getMySQLiObject(){
return self::$instance->MySQLi;
}
public static function query($q){
return self::$instance->MySQLi->query($q);
}
public static function prepare($q){
return self::$instance->MySQLi->prepare($q);
}
public static function esc($str){
return self::$instance->MySQLi->real_escape_string(htmlspecialchars($str));
}
}
我在其他文件中的查询如下:
DB::query('UPDATE `calendar_data` SET `data` = "'.DB::esc(json_encode($array)).'", `upcoming_time` = "'.date('Y-m-d H:i:s', $upcoming).'", `time_now` = NOW() WHERE `id` = "1"');
我应该在哪里将查询插入到类中运行一次?
谢谢!
$this->MySQLi->set_charset("utf8");
$this->MySQLi->query("SET timezone = 'GMT'");
答案 0 :(得分:7)
尝试以下方法:
$this->MySQLi->query("SET time_zone = '+0:00'");
只有在创建并填充了MySQL数据库中的时区信息表时,才能使用命名时区。
答案 1 :(得分:4)
写完之后:
$this->MySQLi->set_charset("utf8");
也写下这个:
$this->MySQLi->query("SET timezone = 'GMT'");
此时区设置将适用于在该连接上发送的所有未来查询。
另外,请确保在mysql数据库中设置区域表。
http://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html
答案 2 :(得分:3)
来自手册;
每个连接时区。连接的每个客户端都有自己的时区设置,由会话time_zone变量给出。最初,会话变量从全局time_zone变量中获取其值,但客户端可以使用以下语句更改自己的时区:
mysql> SET time_zone = timezone;
所以一定要这样;
$this->MySQLi->query("SET time_zone = 'GMT'");
http://dev.mysql.com/doc/refman/5.5/en//time-zone-support.html
http://dev.mysql.com/doc/refman/5.5/en//server-system-variables.html#sysvar_time_zone
答案 3 :(得分:1)
MySQL有广泛的timezone support。您可以在服务器级别,基于每个连接甚至每个查询进行设置。我认为在__construct中执行'SET time_zone = xxx'就足够了。