2012-09-06 13 views
6

Jak mogę zmienić strefę czasową MySQL formacie GMT jak tej funkcji w PHP: /SET GMT TIMEZONE/ date_default_timezone_set ('Etc/GMT');MYSQL ustawić strefę czasową w kodzie PHP

Moja klasa DB jest tutaj:

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

} 

I moje pytania jak to w innych plikach:

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

Gdzie należy umieścić moje zapytanie do klasy na metę raz?

Dzięki!

$this->MySQLi->set_charset("utf8"); 
$this->MySQLi->query("SET timezone = 'GMT'"); 
  • nie działa. Jeśli użyję NOW(), wstawiono czas serwera (GMT-4). Gdzie jest problem ???
+0

Gorąco polecam _against_ tłumiąc swoje błędy używając '@' charakter. – crmpicco

Odpowiedz

3

Po piszesz tak:

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

napisać Również w tym:

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

To ustawienie strefy czasowej będą miały zastosowanie do wszystkich przyszłych zapytań wysyłanych w tym względzie.

Upewnij się również, że masz skonfigurowane tabele stref w bazie danych mysql.

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

+0

Nie działa. Wstawiono czas serwera. – user889349

+0

Nie działa. Jeśli użyję NOW(), wstawiono czas serwera (GMT-4). Gdzie jest problem ??? – user889349

+1

Czy uruchomiłeś 'SET timezone' ponownie przed" SELECT "o datę powrotu, aby sprawdzić, co zostało włożone? Jeśli połączysz się z 'mysql' CLI i uruchomisz zapytanie, ponownie wykorzystasz strefę czasową serwera. –

1

MySQL posiada bogate timezone support. Możesz ustawić go na poziomie serwera, na podstawie połączenia, a nawet na zapytanie. Myślę, że wykonanie "SET time_zone = xxx" w __construct jest dla ciebie wystarczające.

6

Wypróbuj następujące

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

jak przy użyciu nazwanych stref czasowych będzie działać tylko wtedy, gdy czas tablice informacyjne strefa w bazie danych mysql zostały stworzone i zaludnione.

+2

'timezone' dosent działa. Zamiast tego użyj time_zone –

3

Z instrukcji;

Strefy czasowe dla połączenia. Każdy klient, który łączy się, ma własne ustawienie strefy czasowej, podane przez zmienną session time_zone. Początkowo zmienna sesja trwa jego wartość od zmiennej globalnej TIME_ZONE, ale klient może zmienić swoją własną strefę czasową z tym stwierdzeniem:

mysql> SET time_zone = timezone; 

Więc musi być tak;

$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

Powiązane problemy