MYSQL在PHP代码中设置时区

use*_*349 6 php mysql timezone

如何将PHP中的MYSQL TIMEZONE更改为GMT格式:/ SET GMT TIMEZONE/date_default_timezone_set('Etc/GMT');

我的DB类在这里:

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));
    }

}
Run Code Online (Sandbox Code Playgroud)

我在其他文件中的查询如下:

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"');
Run Code Online (Sandbox Code Playgroud)

我应该在哪里将查询插入类中以便运行一次?

谢谢!

$this->MySQLi->set_charset("utf8");
$this->MySQLi->query("SET timezone = 'GMT'");
Run Code Online (Sandbox Code Playgroud)
  • 不行.如果我使用NOW(),则插入服务器时间(GMT-4).哪里有问题???

Mik*_*ike 8

请尝试以下方法:

$this->MySQLi->query("SET time_zone = '+0:00'");
Run Code Online (Sandbox Code Playgroud)

使用命名时区仅在创建并填充MySQL数据库中的时区信息表时才有效.

  • `timezone` dosent有效.请改用time_zone (4认同)

Dan*_*man 5

写完之后:

$this->MySQLi->set_charset("utf8");
Run Code Online (Sandbox Code Playgroud)

还写这个:

$this->MySQLi->query("SET timezone = 'GMT'");
Run Code Online (Sandbox Code Playgroud)

此时区设置将应用于在该连接上发送的所有未来查询。

此外,请确保您已在 mysql 数据库中设置区域表。

http://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html

  • 根据 MySQL 文档,该变量被命名为“time_zone”而不是“timezone”。 (2认同)