2012-09-06 46 views
6

Làm thế nào tôi có thể thay đổi MYSQL múi giờ để định dạng giờ như chức năng này trong PHP: /SET giờ giờ TIMEZONE/ date_default_timezone_set ('Etc/GMT');MYSQL thiết lập múi giờ trong mã PHP

lớp DB của tôi là ở đây:

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

} 

Và thắc mắc của tôi như thế này trong các tập tin khác:

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

tôi nên chèn truy vấn của tôi ở đâu đến lớp cho chạy nó một lần?

Cảm ơn!

$this->MySQLi->set_charset("utf8"); 
$this->MySQLi->query("SET timezone = 'GMT'"); 
  • Không làm việc. Nếu tôi sử dụng NOW(), thời gian máy chủ đã được chèn (GMT-4). Vấn đề ở đâu ???
+0

Tôi rất muốn giới thiệu _against_ đàn áp lỗi của bạn bằng cách sử dụng '@ 'nhân vật. – crmpicco

Trả lời

3

Sau khi bạn viết này:

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

Cũng viết này:

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

thiết lập múi giờ này sẽ áp dụng cho tất cả các truy vấn tương lai gửi vào kết nối đó.

Ngoài ra, hãy đảm bảo bạn đã thiết lập bảng vùng trong cơ sở dữ liệu mysql.

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

+0

Không hoạt động. Đã chèn thời gian máy chủ. – user889349

+0

Không hoạt động. Nếu tôi sử dụng NOW(), thời gian máy chủ đã được chèn (GMT-4). Vấn đề ở đâu ??? – user889349

+1

Bạn đã chạy 'SET timezone' một lần nữa trước khi bạn' SELECT'ed ngày trở lại để kiểm tra những gì đã được chèn vào? Nếu bạn kết nối với 'mysql' CLI và chạy một truy vấn, nó sẽ sử dụng lại múi giờ của máy chủ. –

1

MySQL có rộng timezone support. Bạn có thể đặt nó ở cấp độ máy chủ, trên cơ sở mỗi kết nối và thậm chí mỗi truy vấn. Tôi nghĩ rằng việc thực hiện 'SET time_zone = xxx' trong __construct là đủ cho bạn.

6

Hãy thử như sau

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

Như sử dụng tên các múi giờ sẽ chỉ làm việc nếu các bảng thông tin múi giờ trong cơ sở dữ liệu mysql đã được tạo ra và dân cư.

+2

'timezone' dosent hoạt động. Thay vào đó hãy sử dụng time_zone –

3

Từ hướng dẫn sử dụng;

Múi giờ kết nối. Mỗi máy khách kết nối có cài đặt múi giờ riêng, được đưa ra bởi biến time_zone phiên. Ban đầu, biến phiên mất giá trị của nó từ biến TIME_ZONE toàn cầu, nhưng khách hàng có thể thay đổi múi giờ riêng của mình với tuyên bố này:

mysql> SET time_zone = timezone; 

Vì vậy, phải như thế này;

$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

Các vấn đề liên quan