PDO:PDO :: MYSQL_ATTR_INIT_COMMAND中的多个命令

时间:2016-02-15 17:37:41

标签: php pdo

我正在使用此PDO连接:

try{

$db=new PDO("
mysql:host=localhost;
dbname=...",
"dbu...",
"pass",
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET lc_time_names='de_DE'"));
}
catch(PDOException $e){die("Error!");}

现在我想添加另一个init命令:

array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET lc_time_names='de_DE'",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)

但看起来utf8-one会覆盖第一个init命令。

所以我尝试了这个,但也没有成功:

array(
PDO::MYSQL_ATTR_INIT_COMMAND => array("SET lc_time_names='de_DE'","SET NAMES utf8")
)

知道如何发送多个init命令吗?

谢谢!

2 个答案:

答案 0 :(得分:21)

正确的语法是:

psql is /usr/local/bin/psql
psql is /usr/local/bin/psql
psql is /usr/local/Cellar/postgresql/9.5.0/bin/psql
psql is /usr/local/bin/psql

所以,不是多个数组,而是以逗号作为分隔符的字符串,而不重复SET

修改:根据official documentation

  

SET语句可以包含多个变量赋值,以逗号分隔。

答案 1 :(得分:-5)

  1. 你不需要它。您尝试放入PDO::MYSQL_ATTR_INIT_COMMAND 的所有内容都不属于那里。这不是什么" init命令"但只是常规的SQL查询,只能在连接后以常规方式运行。
  2. 关于SET NAMES特定查询,您不应该以任何方式使用它,因为您应该通过DSN设置编码。
  3. 因此,您的代码应该是

    $db=new PDO("mysql:host=localhost;dbname=...;charset=utf8","dbu...","pass");
    $db->query("SET lc_time_names='de_DE'");
    $db->query("whatever else SQL you have fancy to run");
    

    请注意,不应该像catch(PDOException $e){die("Error!");}那样