Php 使用“连接到数据库后更改时区”;设置时区=…”;

Php 使用“连接到数据库后更改时区”;设置时区=…”;,php,mysql,sql,pdo,timezone,Php,Mysql,Sql,Pdo,Timezone,在连接到我的数据库后,我正在尝试将时区更改为“欧洲/伦敦”。这是我的原始代码: $pdo = new PDO('mysql:host=localhost;dbname=exampletable', 'exampleuser', 'examplepassw', array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 我把它改成了下面的代码,但显然这不是改变时区的正确方法,因为我得到了一个错误 $pdo = new PDO('my

在连接到我的数据库后,我正在尝试将时区更改为“欧洲/伦敦”。这是我的原始代码:

$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开始更改时区?

在其他人的帮助下(参见注释),我设法找到了执行此任务的代码:

$pdo = new PDO('mysql:host=localhost;dbname=exampletable', 
               'exampleuser', 
               'examplepassw', 
               [PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = 'Europe/London'"]);
我是这样做的(在Amazon RDS上-因为没有“系统”方法来改变它):


这是唯一适合我的方法:

$db = new PDO('mysql:host='.$servername.';dbname='.$dbname,$username,$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8, time_zone = "-6:00";', 
PDO::ATTR_EMULATE_PREPARES => false, 
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

希望这能对您有所帮助。

我不知道是否可以将其注入PDO,但是
请看,其中可能有一些答案。正在使用数组(PDO::MYSQL\u ATTR\u INIT\u COMMAND=>“设置名称utf8;设置时区=‘欧洲/布拉格’”)
请尝试一下。您会遇到什么错误?我发现代码中有几个潜在的问题。(a) 该值需要是一个数组,(b)一个单引号字符串内的单引号字符串。(c) 设置时区可能是每条语句,并且(d)您的MySQL服务器可能无法使用时区名称。尝试
array(\PDO::MYSQL_ATTR_INIT_COMMAND=>array('SET NAMES utf8','SET GLOBAL time_zone=“+01:00”)
'SET NAMES utf8','SET time_zone='Europe/London')现在,我们等待…现在我有了这个代码,我的网页将不再加载:
$pdo=new pdo('mysql:host=localhost;dbname=exampletable','exampleuser','examplepassw',array(\pdo::mysql_ATTR_INIT_命令=>array('SET NAMES utf8','SET time_zone='Europe/London'))通过查询而不是DSN设置字符集的任何原因?没有特别的原因。我和拉丁字符打交道,认为这是最好的方式,但事实并非如此。根据文档,在DSN中设置字符集是唯一推荐的方法,因为它告诉serer和client使用哪个字符集,而您的查询只影响服务器
$db = new PDO('mysql:host='.$servername.';dbname='.$dbname,$username,$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8, time_zone = "-6:00";', 
PDO::ATTR_EMULATE_PREPARES => false, 
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));