gpt4 book ai didi

php - Zend_Db : fetchAll() or query()/fetch() for a huge number of records

转载 作者:可可西里 更新时间:2023-10-31 22:19:40 25 4
gpt4 key购买 nike

假设我有

$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会将所有返回的数据加载到$results中。因此,大量数据被加载到 PHP 内存中。以下是我的问题。

  1. C2 是将所有数据加载到 PHP 内存中,还是像准备/执行一样逐一处理?
  2. 假设没有其他选择,C1 还是 C2 是更好的选择?

谢谢!

最佳答案

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

请注意,如果您正在使用 ->fetch(),则必须注意在循环中尝试执行的操作。当您仍然有一个未缓冲的结果集时,您不能在同一个连接上运行其他查询。

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

关于php - Zend_Db : fetchAll() or query()/fetch() for a huge number of records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465944/

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