天天看点

pdo::mysql_attr_init_command,如果使用MYSQL_ATTR_INIT_COMMAND,则会发生PDO抛出错误

pdo::mysql_attr_init_command,如果使用MYSQL_ATTR_INIT_COMMAND,则会发生PDO抛出错误

The PDO::MYSQL_ATTR_INIT_COMMAND seem to break down the query, try your own.

The following:

$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();

Throws:

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."

}

If I remove the MYSQL_ATTR_INIT_COMMAND everything works fine instead... any idea?

Notice that not even this does work...

PDO::MYSQL_ATTR_INIT_COMMAND => self::DRIVER_INIT,

PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true

解决方案

You are using PHP >= 5.3.6, so add charset to dsn and don't use PDO::MYSQL_ATTR_INIT_COMMAND. Further I think you can only execute 1 query with PDO::MYSQL_ATTR_INIT_COMMAND. That might be the problem.

mysql:host=localhost;dbname=php_orm_test;charset=utf8