我知道这必须是一个简单的修复,我部分理解为什么我收到此错误但不知道如何修复它。我查看了文档,但除了使用缓冲查询选项之外无法找到解决方案。我也试过了,但它不起作用。
错误是: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);
}
答案 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());
循环可能也解决了您的“原始”问题。