2012-09-06 7 views
6

Wie kann ich MYSQL Zeitzone GMT-Format wie diese Funktion in PHP ändern: /SET GMT TIMEZONE/ date_default_timezone_set ('Etc/GMT');MYSQL gesetzt Zeitzone in PHP-Code

Meine DB-Klasse ist hier:

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

} 

Und meine Anfragen wie dies auch in anderen Dateien:

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"'); 

Wo soll ich meine Anfrage an die Klasse für Lauf es einmal einfügen?

Danke!

$this->MySQLi->set_charset("utf8"); 
$this->MySQLi->query("SET timezone = 'GMT'"); 
  • funktioniert nicht. Wenn ich NOW() verwende, wurde die Serverzeit eingefügt (GMT-4). Wo ist ein Problem ???
+0

I _against_ unterdrückt Ihre Fehler mit der '@' Charakter stark empfehlen würde. – crmpicco

Antwort

3

Nachdem Sie schreiben:

$this->MySQLi->set_charset("utf8"); 

auch schreiben:

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

Diese Zeitzone Einstellung für alle zukünftigen Anfragen auf dieser Verbindung gesendet gelten.

Stellen Sie außerdem sicher, dass Sie die Zonentabellen in der mysql-Datenbank eingerichtet haben.

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

+0

Funktioniert nicht. Serverzeit eingefügt – user889349

+0

Funktioniert nicht. Wenn ich NOW() verwende, wurde die Serverzeit eingefügt (GMT-4). Wo ist ein Problem ??? – user889349

+1

Haben Sie 'SET timezone' noch einmal ausgeführt, bevor Sie 'SELECT'das Datum zurückgenommen haben, um zu überprüfen, was eingefügt wurde? Wenn Sie eine Verbindung mit der mysql-CLI herstellen und eine Abfrage ausführen, wird die Serverzeitzone erneut verwendet. –

1

MySQL verfügt über umfangreiche timezone support. Sie können es auf Serverebene, für jede Verbindung und sogar für jede Abfrage festlegen. Ich denke, das Ausführen von SET timezone = xxx in __construct ist genug für Sie.

6

Versuchen Sie, die folgende

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

Wie benannte Zeitzonen verwendet, wird nur funktionieren, wenn die Zeitzoneninformationen Tabellen in der MySQL-Datenbank erstellt und besiedelt.

+2

'Zeitzone' Dosent funktioniert. Benutze stattdessen time_zone –

3

Von manuell;

Zeitzonen pro Verbindung. Jeder Client, der eine Verbindung herstellt, hat seine eigene Zeitzoneneinstellung, die durch die Variable time_zone der Sitzung gegeben ist. Zunächst nimmt die Session Variable ihren Wert aus der globalen time_zone variabel, aber der Kunde kann seine eigene Zeitzone mit dieser Aussage ändern:

mysql> SET time_zone = timezone; 

So wie dies sein muss;

$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