PDO在其他未缓冲的查询处于活动状态时无法执行查询

时间:2010-01-14 19:08:06

标签: php mysql

我知道这必须是一个简单的修复,我部分理解为什么我收到此错误但不知道如何修复它。我查看了文档,但除了使用缓冲查询选项之外无法找到解决方案。我也试过了,但它不起作用。

错误是:PDO在其他未缓冲的查询处于活动状态时无法执行查询

错误来自我构建$ result数组的行。

foreach($phones as $phone)
{
    $stmt = db::getInstance()->prepare("CALL phones(:phone)");
    $stmt->bindParam(':phone', $phone, PDO::PARAM_INT, 10);
    $stmt->execute();

    $result[] = db::getInstance()->query("SELECT @phone;")->fetchAll(PDO::FETCH_ASSOC);
}

1 个答案:

答案 0 :(得分:-1)

我们来看一个示例表

CREATE TABLE foo (
  id int auto_increment,  
  phone int,  
  primary key(id),  
  unique key(phone)  
)

示例程序

delimiter //
CREATE PROCEDURE phones(in p INT)
BEGIN
  SELECT phone FROM foo WHERE phone > p;
END//
delimiter ;

和一些示例数据

INSERT INTO foo (phone) VALUES (1),(2),(3),(4),(5)

使用PDOStatement可以从存储过程中获取结果集。

$pdo = new PDO('mysql:host=localhost;dbname=test', 'localonly', 'localonly');
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $pdo->prepare("CALL phones(:phone)");
$stmt->bindParam(':phone', $phone);
$phone = 1;
$stmt->execute();
do {
  echo "\nresult set: ";
  while($row=$stmt->fetch()) {
    echo $row['phone'], " | ";
  }
} while($stmt->nextRowset());

打印result set: 2 | 3 | 4 | 5 |

(测试环境:php 5.3.1 / winxp,mysql 5.1.37)

do { } while($stmt->nextRowset());循环可能也解决了您的“原始”问题。