gpt4 book ai didi

php - Zend db with prepared statement 不获取所有数据

转载 作者:行者123 更新时间:2023-11-29 02:27:08 30 4
gpt4 key购买 nike

首先是有罪代码:

$preparedGetData = $db->prepare("CALL getData(?)");
foreach($userSet as $r) {
$preparedGetData->execute(array($r['id_user']));
$rs = $preparedGetData->fetchAll();
$preparedGetData->closeCursor();
}

说明

getData = mysql 中的存储过程
$db = Zend_Db_Adapter_Pdo_Mysql 实例(使用 Zend 版本 1.10.0)

症状

  • 当我在第二个循环中遗漏 closeCursor 时,我已经收到错误:

    PHP fatal error :消息为“SQLSTATE[HY000]”的未捕获异常“PDOException”:一般错误:2014 无法在其他未缓冲查询处于事件状态时执行查询。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲。

  • 但我正在使用 fetchAll !!!

  • 当我添加 closeCursor 时,结果不完整。在查询浏览器中调用 CALL getData('3872') 返回 1 行 72 列。上面的代码执行的相同操作返回只有前 41 列的 1 行。

我做错了什么?

Edit2:半解

代码更新为:

$preparedGetData = $db->prepare("CALL getData(?)");
foreach($userSet as $r) {
$preparedGetData->execute(array($r['id_user']));

$rs=array();

do {
try {
$partial_rowset = $preparedGetData->fetchAll(); // When I put fetchAll() after the end of the cycle, I get empty resultset.
} catch (PDOException $error) { // The PDOException doesn't get caught here. Why?
error_log($error);
} catch (Exception $error) {
error_log($error);
}
if ($partial_rowset) {
$rs=array_merge($rs,$partial_rowset);
}
} while ($preparedGetData->nextRowset());
}

症状

  • 获取错误:
    PHP fatal error :未捕获异常“PDOException”,消息为“SQLSTATE[HY000]:一般错误
    /home/GIT/includes/Zend/Db/Statement/Pdo.php:294 中的下一个异常“Zend_Db_Statement_Exception”和消息“SQLSTATE[HY000]: 一般错误”
    fetchAll 的线上。
  • 我可以使用通用异常捕获此错误。
  • 通过这段代码,我得到了所有 72 列。
  • 我觉得这很讨厌,因为我故意捕获一般异常并将其转化为日志。我猜这也会成为一个性能问题(循环运行大约 10 000 次)。

最佳答案

MySQL 存储过程可能 有多个结果集。也就是说,您可以在一个存储过程中运行多个 SELECT 查询,然后迭代这些多个结果集。

这使获取变得复杂,因为整个结果实际上就像一个数组的数组(多个结果集,每个结果集可能有多行,每行可能有多列)。

但是fetchAll() 只从一个 结果集中获取所有行。所以当你调用一个存储过程时,你需要强制它刷新所有的结果集。也就是说,继续调用 nextRowset() 直到该函数返回 null。

Zend_Db API 是根据 PDO 建模的,因此您可以在 PDOStatement::nextRowset() 的文档中查看 nextRowset() 的示例用法。 .

不幸的是,没有像fetchAllRowsets() 这样的函数。你只能自己做一个 while 循环。

关于php - Zend db with prepared statement 不获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554014/

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