`
zhengdl126
  • 浏览: 2530920 次
  • 性别: 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());  
    }

 

 

 

分享到:
评论

相关推荐

    PHP项目开发全程实录-博客管理系统(p_wv4g70_php_

    PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::PDO::...

    PDO::errorCode讲解

    PDO::errorCode() 是 PHP 中 PDO (PHP Data Objects) 扩展的一个方法,它用于获取与当前数据库句柄(连接)的上一次操作相关的 SQLSTATE 错误代码。这个方法是自 PHP 5.1.0 版本及更高版本以及 PECL pdo 0.1.0 及其...

    PDO::quote讲解

    - 虽然PDO::quote提供了安全保护,但更推荐使用预处理语句(例如`PDO::prepare`和`PDOStatement::execute`),因为它们在处理数据时提供了更高的效率和安全性。 - 不是所有的PDO驱动都支持`PDO::quote`,在某些情况...

    PDO::commit讲解

    $sth->execute(array( $fruit->name, $fruit->colour, $fruit->calories, )); } /* 提交更改 */ $dbh->commit(); /* 现在数据库连接返回到自动提交模式 */ ?> ``` #### DDL 事务 对于数据库定义语言(DDL)...

    pdo.rar_site:www.pudn.com

    PDO(PHP Data Objects)是PHP语言中用于数据库访问的一个扩展,它提供了一个数据访问接口,使得开发者...在“pdo.rar”这个压缩包中,可能包含了实现PDO功能的相关示例代码,可以帮助初学者快速理解和掌握PDO的使用。

    PDO::setAttribute讲解

    PDO::setAttribute是PDO扩展提供的一个方法,用于设置数据库句柄的属性值。通过设置这些属性,可以控制数据库句柄的行为,比如错误处理方式、列名大小写的处理、是否自动提交事务、超时设置等等。在深入讲解PDO::...

    pdo.rar_PDO 封装

    2. **处理异常**:为了捕获可能发生的错误,可以开启PDO的异常模式,通过设置`PDO::ATTR_ERRMODE`属性为`PDO::ERRMODE_EXCEPTION`。这样,当发生错误时,会抛出一个异常。 3. **执行SQL查询**:PDO提供了`query()`...

    PDO::exec讲解

    PDO::exec 是 PHP 中用于执行 SQL 语句的方法,它属于 PHP Data Objects(PDO)扩展,主要用于数据库...在实际开发中,使用预处理语句(PDO::prepare 和 PDOStatement::execute)更安全,因为它可以防止 SQL 注入攻击。

    PDO::getAttribute讲解

    在使用PDO::getAttribute之前,需要先创建一个PDO对象实例,然后使用该实例调用getAttribute方法获取相应的属性。PDO::getAttribute方法在PHP 5.1.0版本之后提供,PECL PDO扩展则要求0.1.0以上版本。 PDO::...

    PDO::inTransaction讲解

    在使用PDO::inTransaction之前,需要了解的是,事务通常与数据库管理系统中的ACID原则相关联,其中A代表原子性(Atomicity),C代表一致性(Consistency),I代表隔离性(Isolation),D代表持久性(Durability)。...

    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::getAvailableDrivers讲解

    `PDO::getAvailableDrivers`是PDO类的一个静态方法,用于获取当前环境中已经安装并可以使用的PDO数据库驱动列表。 **方法说明** `PDO::getAvailableDrivers`没有参数,它会返回一个包含所有可用PDO驱动名称的数组...

    关于PDO操作的一点笔记

    ### 关于PDO操作的一点笔记 #### 一、连接数据库 PDO(PHP Data Objects)是一种轻量级且功能强大的数据库访问层,它提供了一个统一的接口来与多种数据库进行交互。PDO 支持多种数据库系统,包括 MySQL、SQLite、...

    PDO::query讲解

    为了捕获错误,你需要设置PDO对象的错误模式,例如使用`PDO::ERRMODE_EXCEPTION`。这样,当查询失败时,会触发一个异常,你可以捕获并处理这个异常。 ```php $pdo = new PDO('dsn', 'username', 'password', [ PDO...

    PDO::beginTransaction讲解

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

    PHP PDOStatement::execute讲解

    `PDOStatement::execute`是PDOStatement类的一个方法,用于执行预处理的SQL语句。这个方法适用于已经通过`PDO::prepare`创建的预处理语句对象。在PHP 5.1.0及以上版本以及PECL pdo 0.1.0及更高版本中,可以使用`...

Global site tag (gtag.js) - Google Analytics