2012-09-06 11 views
6

¿Cómo puedo cambiar MYSQL horaria de GMT formato como esta función en PHP: /SET TIMEZONE GMT/ date_default_timezone_set ('Etc/GMT');MYSQL establecer la zona horaria en el código PHP

Mi clase DB está aquí:

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

} 

Y mis preguntas como esta en otros archivos:

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

Dónde debo insertar mi consulta a la clase de carrera una vez?

Gracias!

$this->MySQLi->set_charset("utf8"); 
$this->MySQLi->query("SET timezone = 'GMT'"); 
  • no funciona. Si uso NOW(), se insertó el tiempo del servidor (GMT-4). ¿Dónde hay un problema?
+0

Yo recomendaría fuertemente _against_ supresión de sus errores utilizando el '' @ carácter. – crmpicco

Respuesta

3

Después de escribir esto:

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

también escribe esto:

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

ajuste Esta zona horaria se aplicará a todas las consultas futuras enviados en esa conexión.

Además, asegúrese de haber configurado las tablas de zona en la base de datos mysql.

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

+0

No funciona. Hora del servidor insertada. – user889349

+0

No funciona. Si uso NOW(), se insertó el tiempo del servidor (GMT-4). ¿Dónde hay un problema? – user889349

+1

¿Ha ejecutado 'SET timezone' nuevamente antes de' SELECT' recuperar la fecha para verificar lo que se insertó? Si se conecta con la CLI 'mysql' y ejecuta una consulta, volverá a utilizar la zona horaria del servidor. –

1

MySQL tiene una amplia timezone support. Puede configurarlo en el nivel del servidor, por conexión e incluso por consulta. Creo que la ejecución de 'SET time_zone = xxx' en __construct es suficiente para ti.

6

intente lo siguiente

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

Como la utilización de zonas horarias con nombre sólo funcionará si se han creado y llenado las tablas de información de zona horaria en la base de datos MySQL.

+2

'timezone' dosent funciona. Use time_zone en su lugar –

3

De manual;

Zonas horarias por conexión. Cada cliente que se conecta tiene su propia configuración de zona horaria, dada por la sesión time_zone variable. Inicialmente, la variable de sesión toma su valor de la variable time_zone global, pero el cliente puede cambiar su propia zona horaria con esta declaración:

mysql> SET time_zone = timezone; 

Así debe ser así;

$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