php – Zend_Db:fetchAll()或query()/ fetch()为大量的记录
发布时间:2020-12-13 17:27:34 所属栏目:PHP教程 来源:网络整理
导读:假设我有 $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);f
假设我有
$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内存,还是像处理/执行一样处理? 谢谢!
你的预感是正确的.至少如果您使用PDO驱动程序,> fetch()读取无缓冲的结果,而 – > fetchAll()则返回一个大数组中的所有数据.
请注意,如果您使用 – > fetch(),则必须注意您在循环中尝试做什么.您仍然无法缓冲的结果集,您不能在同一连接上运行其他查询. 因此,如果您的计划是在循环内更新相同的行,则需要找到一种方法来延迟执行更新(通过排队然后以某种方式排队),直到您退出循环. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |