`
zhengdl126
  • 浏览: 2503828 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

PDO报错:Cannot execute queries while other unbuffered queries are active.

 
阅读更多

用 PDOStatement->execute() 执行查询时出现错误:

Message: SQLSTATE[HY000]: General error: 2014 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.

经过测试发现是因为在前一次 execute 里面执行了多条SQL语句(即通过分号分隔连续执行了多次的select/insert/update)。

http://blog.stormwild.net/2009/04/21/cannot-execute-queries-while-other-unbuffered-queries-are-active/

看上去应该是 Pdo_Mysql 库本身存在的问题?没有找到比较好的解决方案。唯一比较笨的方法是:在执行了 multi-query 语句之后立即 closeConnection ,断开本次数据库连接。再下次查询之前先重新建立连接。这样 unbuffered queries 就被重置了。

 

> reset query cache

 

 

 

 

也就是说,未结束之前的查询而再次查询,这样是会出错地,所以要释放掉之前的查询。

解决方法:

[php] view plaincopy

    $configs = $this->config; 
    // 解决方法就是增加这句 
    $configs['params'][constant('PDO::MYSQL_ATTR_USE_BUFFERED_QUERY')] = true; 
    if ($this->pconnect) { 
    $configs ['params'] [constant ( 'PDO::ATTR_PERSISTENT' )] = true; 
    } 
    try { 
    $this->link = new PDO ( $configs ['dsn'], $configs ['username'], $configs ['password'], $configs ['params'] ); 
    } catch ( PDOException $e ) { 
    throw new exception ( $e->getMessage () ); 
    //exit('连接失败:'.$e->getMessage());  
    }

 

 

 

分享到:
评论

相关推荐

    PDO::errorCode讲解

    PDO::errorCode PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 mixed PDO::errorCode ( void ) 返回值 返回一个 SQLSTATE,一个由5个字母或数字组成...

    PDO::quote讲解

    PDO::quote PDO::quote — 为SQL语句中的字符串添加引号。(PHP 5 >= 5.1.0, PECL pdo >= 0.2.1) 说明 语法 public string PDO::quote ( string $string [, int $parameter_type = PDO::PARAM_STR ] ) PDO::quote()...

    PDO::setAttribute讲解

    PDO::setAttribute PDO::setAttribute — 设置属性(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDO::setAttribute ( int $attribute , mixed $value ) 设置数据库句柄属性。下面列出了一些可用的通用属性...

    关于PDO操作的一点笔记

    关于PDO操作的一点笔记: 1、连接数据库 $con=new PDO(string $dsn [, string $username [, string $password [, array $driver_options ]]]); $dsn为数据源,比如$dsn="mysql:host=localhost;dbname=test"; 连接到...

    PDO连接数据库类

    查询操作主要是PDO::query()、...PDO::prepare()主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。

    PDO::prepare讲解

    PDO::prepare PDO::prepare — 准备要执行的SQL语句并返回一个 PDOStatement 对象(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 public PDOStatement PDO::prepare ( string $statement [, array $driver_options...

    PDO::beginTransaction讲解

    PDO::beginTransaction PDO::beginTransaction 启动一个事务(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDO::beginTransaction ( void ) 关闭自动提交模式。自动提交模式被关闭的同时,通过 PDO 对象实例...

    PDO::exec讲解

    PDO::exec PDO::exec — 执行一条 SQL 语句,并返回受影响的行数(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 int PDO::exec ( string $statement ) PDO::exec() 在一个单独的函数调用中执行一...

    PDO::commit讲解

    今天小编就为大家分享一篇关于PDO::commit讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    PDO::getAttribute讲解

    PDO::getAttribute PDO::getAttribute — 取回一个数据库连接的属性(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 mixed PDO::getAttribute ( int $attribute ) 此函数(方法)返回一个数据库连接的属性值。 取回...

    PHP PDOStatement::execute讲解

    PDOStatement::execute PDOStatement::execute — 执行一条预处理语句(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDOStatement::execute ([ array $input_parameters ] ) 执行预处理过的语句。如果预处理...

    PDO::_construct讲解

    PDO::_construct PDO::_construct — 创建一个表示数据库连接的 PDO 实例(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 PDO::_construct ( string $dsn [, string $username [, string $password [, array $...

    PDO::rollBack讲解

    PDO::rollBack PDO::rollBack — 回滚一个事务(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDO::rollBack ( void ) 回滚由PDO::beginTransaction()发起的当前事务。如果没有事务激活,将抛出一个 ...

    PDO::inTransaction讲解

    PDO::inTransaction PDO::inTransaction — 检查是否在一个事务内(PHP 5 >= 5.3.3, Bundled pdo_pgsql) 说明 语法 bool PDO::inTransaction ( void ) 检查驱动内的一个事务当前是否处于激活。此方法仅对支持事务的...

    PDO::lastInsertId讲解

    PDO::lastInsertId PDO::lastInsertId — 返回最后插入行的ID或序列值(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 string PDO::lastInsertId ([ string $name = NULL ] ) 返回最后插入行的ID,或者是一个序列...

    PDO::errorInfo讲解

    PDO::errorInfo PDO::errorCode — 返回最后一次操作数据库的错误信息(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 public array PDO::errorInfo ( void ) 返回值 返回一个数组,该数组包含了最后一次操作数据库...

    PDO::query讲解

    PDO::query PDO::query — 执行 SQL 语句,返回PDOStatement对象,可以理解为结果集(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0) 说明 语法 public PDOStatement PDO::query ( string $statement ) public PDOStatement ...

    PDO::getAvailableDrivers讲解

    PDO::getAvailableDrivers PDO::getAvailableDrivers — 返回一个可用驱动的数组(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 static array PDO::getAvailableDrivers ( void ) array pdo_drivers ( void ) 此...

Global site tag (gtag.js) - Google Analytics