微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Zend_Db:fetchAll()或query()/ fetch()为大量的记录

假设我有
$db is an instance of Zend_Db_Adapter_Abstract and
$sql = 'SELECT blah blah FROM table' will return a huge number of records.

有两个代码片段来处理返回的数据如下.

// Code fragment 1 (let's call it C1).
$results = $db->fetchAll($sql);
foreach ($results as $row) {
    // Process $row
}

// Code fragment 2 (let's call it C2).
$stmt = $db->query($sql);
while ($row = $stmt->fetch()) {
    // Process $row
}

我的理解是,C1将所有返回的数据加载到$结果.所以,巨大的数据被加载到PHP内存.以下是我的问题

> C2是否将所有数据加载到PHP内存,还是像处理/执行一样处理?
>假设没有其他选择,C1或C2是一个更好的选择?

谢谢!

你的预感是正确的.至少如果您使用PDO驱动程序,> fetch()读取无缓冲的结果,而 – > fetchAll()则返回一个大数组中的所有数据.

请注意,如果您使用 – > fetch(),则必须注意您在循环中尝试做什么.您仍然无法缓冲的结果集,您不能在同一连接上运行其他查询.

因此,如果您的计划是在循环内更新相同的行,则需要找到一种方法来延迟执行更新(通过排队然后以某种方式排队),直到您退出循环.

原文地址:https://www.jb51.cc/php/131593.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐