如果使用MYSQL_ATTR_INIT_COMMAND,则会发生PDO抛出错误 [英] PDO throwing error if MYSQL_ATTR_INIT_COMMAND is used

查看:366
本文介绍了如果使用MYSQL_ATTR_INIT_COMMAND,则会发生PDO抛出错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

PDO :: MYSQL_ATTR_INIT_COMMAND似乎分解了查询,请尝试使用您自己的

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

以下:

  $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,那么一切正常,反而是...知道吗?

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

推荐答案

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

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

这篇关于如果使用MYSQL_ATTR_INIT_COMMAND,则会发生PDO抛出错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆