gpt4 book ai didi

php - "Cannot execute queries while other unbuffered queries are active"循环错误

转载 作者:行者123 更新时间:2023-11-29 02:26:39 32 4
gpt4 key购买 nike

很抱歉问这个问题。我已经阅读了很多类似的内容,但从未找到我可以成功实现的解决方案。我发现的所有提示和技巧对我都没有用。

我有一个包含数据的大型关联数组,我想使用带有 PDO 的存储过程将其插入到 mysql 数据库中。

$data_arr = {a lot of data with keys: Name, Nbr, Val} //This is really 41 columns
$inputs = array('Name','Nbr','Val');
$query = 'CALL add_edit_standard(:Name,:Nbr,:Val)';
$stmt = $db->prepare($query);
foreach($inputs AS $Akey => $Aval){
$values[$Aval]=0;
$stmt->bindParam(':'.$Aval,$values[$Aval]);
}
foreach($data_arr AS $key => $val){
$values = $val;
$stmt->execute();
$res = $stmt->fetchAll();
}

这对 $data_arr 中的第一行非常有效,但第二行和其余行会抛出错误:

Warning: PDOStatement::execute(): 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.

我已经尝试使用 fetchAll() 以及连接属性,但没有成功。我还尝试为每次调用做出新的声明:

foreach($data_arr AS $key => $val)
{
$values = $val;
$stmt = $db->prepare($query);
foreach($inputs AS $Akey => $Aval)
{
$stmt->bindValue(':'.$Aval,$values[$Aval]);
}
$stmt->execute();
$res = $stmt->fetchAll();
$stmt->closeCursor();
}

同样,这对第一行非常有效,但随后会抛出以下错误:

Warning: Packets out of order. Expected 1 received 57. Packet size=7

我已经尝试了我想出的一切。请帮助我找到使其工作的方法。

最佳答案

在执行循环中获取所有结果后,您应该获取下一个行集,然后在尝试再次执行存储过程之前关闭游标。试试这个:

foreach($data_arr AS $key => $val){
$values = $val;
$stmt->execute();
$res = $stmt->fetchAll();
$stmt->nextRowset(); // NEW: Get the next rowset after fetching your results
$stmt->closeCursor(); // NEW: Close the cursor
}

这里真正重要的添加是对 nextRowSet() 的调用.在后台,PDO 返回第二个行集,您需要在同一连接上执行第二个(和后续)存储过程之前访问它。

关于php - "Cannot execute queries while other unbuffered queries are active"循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20607876/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com