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 = '';