2012-09-06 10 views
6

मैं कैसे PHP में इस समारोह की तरह जीएमटी प्रारूप लिए MySQL समय क्षेत्र बदलने के कर सकते हैं: /सेट GMT समय क्षेत्र/ date_default_timezone_set ('आदि/GMT');MYSQL सेट समयक्षेत्र

मेरे डीबी वर्ग यहाँ है:

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'"); 
  • काम नहीं करता। अगर मैं अब() का उपयोग करता हूं, सर्वर का समय डाला गया था (जीएमटी -4)। एक समस्या कहां है ???
+0

मैं दृढ़ता से '@' चरित्र का उपयोग कर अपने त्रुटियों को दबा _against_ की सिफारिश करेंगे। – crmpicco

उत्तर

3

आप इस बारे में बाद में:

$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

+0

काम नहीं करता है। सर्वर समय डाला गया। – user889349

+0

काम नहीं करता है। अगर मैं अब() का उपयोग करता हूं, सर्वर का समय डाला गया था (जीएमटी -4)। एक समस्या कहां है ??? – user889349

+1

क्या आपने 'एसईटी टाइमज़ोन' फिर से चलाया था, इससे पहले कि आप क्या डाला गया था, यह जांचने के लिए तारीख को 'पिछली बार चुनें'? यदि आप 'mysql' सीएलआई से कनेक्ट करते हैं और एक क्वेरी चलाते हैं तो यह सर्वर समय क्षेत्र का फिर से उपयोग करने जा रहा है। –

1

MySQL व्यापक timezone support है। आप इसे सर्वर स्तर पर प्रति कनेक्शन आधार पर और यहां तक ​​कि प्रति क्वेरी पर भी सेट कर सकते हैं। मुझे लगता है कि __construct में 'SET time_zone = xxx' निष्पादित करना आपके लिए पर्याप्त है।

6

निम्नलिखित

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

नामित समय क्षेत्र का उपयोग कर केवल काम करेंगे mysql डेटाबेस में समय क्षेत्र जानकारी टेबल बनाया गया है, तो और अधिक आबादी वाले के रूप में की कोशिश करो।

+2

'टाइमज़ोन 'डॉसेंट काम करता है। इसके बजाए time_zone का प्रयोग करें –

3

मैनुअल से;

प्रति कनेक्शन समय क्षेत्र। प्रत्येक क्लाइंट जो कनेक्ट करता है, उसकी टाइम ज़ोन सेटिंग होती है, जो सत्र टाइम_ज़ोन वैरिएबल द्वारा दी जाती है। प्रारंभ में, सत्र चर वैश्विक 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

संबंधित मुद्दे