用 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::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() 是 PHP 中 PDO (PHP Data Objects) 扩展的一个方法,它用于获取与当前数据库句柄(连接)的上一次操作相关的 SQLSTATE 错误代码。这个方法是自 PHP 5.1.0 版本及更高版本以及 PECL pdo 0.1.0 及其...
- 虽然PDO::quote提供了安全保护,但更推荐使用预处理语句(例如`PDO::prepare`和`PDOStatement::execute`),因为它们在处理数据时提供了更高的效率和安全性。 - 不是所有的PDO驱动都支持`PDO::quote`,在某些情况...
$sth->execute(array( $fruit->name, $fruit->colour, $fruit->calories, )); } /* 提交更改 */ $dbh->commit(); /* 现在数据库连接返回到自动提交模式 */ ?> ``` #### DDL 事务 对于数据库定义语言(DDL)...
PDO(PHP Data Objects)是PHP语言中用于数据库访问的一个扩展,它提供了一个数据访问接口,使得开发者...在“pdo.rar”这个压缩包中,可能包含了实现PDO功能的相关示例代码,可以帮助初学者快速理解和掌握PDO的使用。
PDO::setAttribute是PDO扩展提供的一个方法,用于设置数据库句柄的属性值。通过设置这些属性,可以控制数据库句柄的行为,比如错误处理方式、列名大小写的处理、是否自动提交事务、超时设置等等。在深入讲解PDO::...
`PDOStatement::execute`是PDOStatement类的一个方法,用于执行预处理的SQL语句。这个方法适用于已经通过`PDO::prepare`创建的预处理语句对象。在PHP 5.1.0及以上版本以及PECL pdo 0.1.0及更高版本中,可以使用`...
2. **处理异常**:为了捕获可能发生的错误,可以开启PDO的异常模式,通过设置`PDO::ATTR_ERRMODE`属性为`PDO::ERRMODE_EXCEPTION`。这样,当发生错误时,会抛出一个异常。 3. **执行SQL查询**:PDO提供了`query()`...
PDO::exec 是 PHP 中用于执行 SQL 语句的方法,它属于 PHP Data Objects(PDO)扩展,主要用于数据库...在实际开发中,使用预处理语句(PDO::prepare 和 PDOStatement::execute)更安全,因为它可以防止 SQL 注入攻击。
在使用PDO::getAttribute之前,需要先创建一个PDO对象实例,然后使用该实例调用getAttribute方法获取相应的属性。PDO::getAttribute方法在PHP 5.1.0版本之后提供,PECL PDO扩展则要求0.1.0以上版本。 PDO::...
在使用PDO::inTransaction之前,需要了解的是,事务通常与数据库管理系统中的ACID原则相关联,其中A代表原子性(Atomicity),C代表一致性(Consistency),I代表隔离性(Isolation),D代表持久性(Durability)。...
查询操作主要是PDO::query()、...PDO::prepare()主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。
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类的一个静态方法,用于获取当前环境中已经安装并可以使用的PDO数据库驱动列表。 **方法说明** `PDO::getAvailableDrivers`没有参数,它会返回一个包含所有可用PDO驱动名称的数组...
### 关于PDO操作的一点笔记 #### 一、连接数据库 PDO(PHP Data Objects)是一种轻量级且功能强大的数据库访问层,它提供了一个统一的接口来与多种数据库进行交互。PDO 支持多种数据库系统,包括 MySQL、SQLite、...
为了捕获错误,你需要设置PDO对象的错误模式,例如使用`PDO::ERRMODE_EXCEPTION`。这样,当查询失败时,会触发一个异常,你可以捕获并处理这个异常。 ```php $pdo = new PDO('dsn', 'username', 'password', [ PDO...
PDO::beginTransaction PDO::beginTransaction 启动一个事务(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDO::beginTransaction ( void ) 关闭自动提交模式。自动提交模式被关闭的同时,通过 PDO 对象实例...