2014-07-03 85 views
1

我試圖在連接到我的數據庫後立即將時區更改爲「Europe/London」。這是我原來的代碼:使用「set time_zone = ...」連接到數據庫後更改時區

$pdo = new PDO('mysql:host=localhost;dbname=exampletable', 'exampleuser', 'examplepassw', array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

我把它改爲下面的代碼,但顯然這並不是更改時區,因爲我得到一個錯誤的正確方法。

$pdo = new PDO('mysql:host=localhost;dbname=exampletable', 'exampleuser', 'examplepassw', array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 'SET time_zone = 'Europe/London'')); 

我怎樣才能改變從PDO開始時區?

+0

我一個不知道怎麼做,如果有可能將其注入PDO,但'

+3

查看https://bugs.php.net/bug.php?id=48859可能會爲您提供一些答案。正在使用'array(PDO :: MYSQL_ATTR_INIT_COMMAND =>「SET NAMES utf8; SET time_zone ='Europe/Prague'」)'所以試試看。 –

+0

你會得到什麼錯誤?我看到了代碼的幾個潛在問題。 (a)該值需要是一個數組,(b)單引號字符串中的單引號字符串。 (c)SET time_zone可能是per statement,(d)時區名稱可能不適用於您的MySQL服務器。試一下'array(\ PDO :: MYSQL_ATTR_INIT_COMMAND => array('SET NAMES utf8','SET GLOBAL time_zone =「+01:00」'))'。 – bishop

回答

6

跟別人(見註釋)的一些幫助,我設法找到,沒有工作的代碼:

$pdo = new PDO('mysql:host=localhost;dbname=exampletable', 
       'exampleuser', 
       'examplepassw', 
       [PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = 'Europe/London'"]); 
1

我不喜歡這樣(在Amazon RDS - 因爲沒有「系統」的方式修改):

try { 
    $timezone = "America/Chicago";; 

    $objDb = new PDO('mysql:host=localhost;dbname=my_database', 'username', 'password'); 
    $objDb->exec("SET time_zone = '{$timezone}'"); 

} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
}