6

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

}

そして、他のファイルで次のような私のクエリ:

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)。どこが問題???
4

4 に答える 4

10

次のことを試してください。

$this->MySQLi->query("SET time_zone = '+0:00'");

名前付きタイムゾーンの使用は、MySQL データベースのタイム ゾーン情報テーブルが作成され、入力されている場合にのみ機能します。

于 2012-09-06T09:57:16.337 に答える
5

これを書いた後:

$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

于 2012-09-06T09:26:10.270 に答える
4

マニュアルから;

接続ごとのタイム ゾーン。接続する各クライアントには、セッションの 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

于 2013-02-06T13:38:31.230 に答える
2

MySQL は広範なタイムゾーンをサポートしています。サーバーレベル、接続ごと、さらにはクエリごとに設定できます。__construct で 'SET time_zone = xxx' を実行するだけで十分だと思います。

于 2012-09-06T09:26:27.617 に答える