2

PDO::MYSQL_ATTR_INIT_COMMAND 似乎打破了查询,尝试你自己的。

以下:

  $connection = new \PDO("mysql:host=localhost;dbname=php_orm_test", "dev", "dev",[
     PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8; SET CHARACTER SET UTF8; SET character_set_connection=UTF8; SET character_set_client=UTF8;"
  ]);
  $statement = $connection->prepare("describe users");
  $statement->execute();
  $statement->fetchAll(\PDO::FETCH_ASSOC);
  var_dump($statement->errorInfo());
  $statement->closeCursor();

抛出:

array(3) {
  [0]=>
  string(5) "00000"
  [1]=>
  int(2014)
  [2]=>
  string(269) "Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute."
}

如果我删除 MYSQL_ATTR_INIT_COMMAND 一切正常...任何想法?

请注意,即使这也不起作用......

    PDO::MYSQL_ATTR_INIT_COMMAND => self::DRIVER_INIT,
    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
4

2 回答 2

6

您正在使用 PHP >= 5.3.6,因此将 charset 添加到 dsn 并且不要使用PDO::MYSQL_ATTR_INIT_COMMAND. 此外,我认为您只能执行 1 个查询PDO::MYSQL_ATTR_INIT_COMMAND。这可能是问题所在。

mysql:host=localhost;dbname=php_orm_test;charset=utf8
于 2013-07-26T21:31:57.753 回答
5

您至少可以使用SET由逗号分隔的多个语句,例如SET names utf8, @@session.sql_mode = '';

于 2013-09-17T14:29:10.923 回答