Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL在PHP代码中设置时区_Php_Mysql_Timezone - Fatal编程技术网

MYSQL在PHP代码中设置时区

MYSQL在PHP代码中设置时区,php,mysql,timezone,Php,Mysql,Timezone,如何将MYSQL时区更改为GMT格式,如PHP中的以下函数: /设置GMT时区/ 日期默认时区设置('Etc/GMT') 我的DB类在这里: class DB { private static $instance; private $MySQLi; private function __construct(array $dbOptions){ $this->MySQLi = @ new mysqli( $dbOptions['db_host'

如何将MYSQL时区更改为GMT格式,如PHP中的以下函数: /设置GMT时区/ 日期默认时区设置('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));
    }

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

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'");
  • 不起作用。如果使用NOW(),则插入了服务器时间(GMT-4)。哪里有问题
在写下以下内容后:

$this->MySQLi->set_charset("utf8");
$this->MySQLi->query("SET timezone = 'GMT'");
同时写下:

$this->MySQLi->set_charset("utf8");
$this->MySQLi->query("SET timezone = 'GMT'");
此时区设置将应用于将来在该连接上发送的所有查询

另外,确保已经在mysql数据库中设置了区域表

MySQL具有广泛的功能。您可以在服务器级别、每个连接甚至每个查询上进行设置。我认为在构造中执行“SET time\u zone=xxx”就足够了。

尝试以下方法:

$this->MySQLi->query("SET time_zone = '+0:00'");
只有在MySQL数据库中的时区信息表已经创建和填充的情况下,使用命名时区才会起作用。

来自手动

每个连接时区。每个连接的客户端都有自己的时区设置,由session time_zone变量提供。最初,会话变量从全局时区变量获取其值,但客户端可以使用以下语句更改其自己的时区:

所以一定是这样,

$this->MySQLi->query("SET time_zone = 'GMT'");


我强烈建议不要使用
@
字符来抑制您的错误。它不起作用。如果使用NOW(),则插入了服务器时间(GMT-4)。哪里有问题???在
选择
将日期返回以检查插入内容之前,是否再次运行了
设置时区
?如果连接到
mysql
CLI并运行查询,它将再次使用服务器时区。在我的INSERT查询之前,已将set timezone放置到脚本中。我试图运行这个查询:DB::query('UPDATE
users\u calendar\u data
SET
data
=”).DB::esc(json\u encode($array))。“,
uncoming\u time
=”.date('Y-m-d H:I:s',$uncoming.),
time\u now
=now(),其中
id
=“1”);但是我的time_now值等于服务器时间(不是GMT)。如果您认为它在错误的时区,这意味着您必须在某处选择它查看您更新的内容。您正在设置该连接的时区吗?另外,您是否填充了MySQL tzinfo数据库?没有这个你不能做任何事情。根据MySQL文档,变量名为“timezone”,而不是“timezone”。