Ошибка сброса PDO, если используется MYSQL_ATTR_INIT_COMMAND

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 

Вы используете 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 

Вы можете, по крайней мере, использовать несколько операторов SET разделенных запятыми, например SET names utf8, @@session.sql_mode = '';