gpt4 book ai didi

php - 使用具体的 Zend_Db_Table_Abstract 有效地遍历行集

转载 作者:可可西里 更新时间:2023-11-01 13:25:04 24 4
gpt4 key购买 nike

我正在使用 Zend_Db_Table_Abstract 的具体实现:

class DB_TestClass extends Zend_Db_Table_Abstract {
protected $_name = "test.TestData";
}

如果我想选择表格中的所有行,我似乎有一个选择:

$t = new DB_TestClass;
$rowset = $t->fetchAll();

这将返回一个 Zend_Db_Table_Rowset 的实例,它有一个可迭代的接口(interface),您可以循环访问每个行条目作为 rowClass 实例:

foreach($rowset as $row) {
var_dump($row);
}

然而,行集已将数据库中的每一行加载到内存中(!)在小表上这没问题,但在大表上 - 例如数千行 - 它很快就会耗尽 PHP 可用的内存并且脚本会死掉.

我如何使用 Zend_Db 遍历结果集,一次从语句句柄中检索一行,ala mysql_fetch_assoc()?这将允许在不使用过多内存的情况下高效访问任意数量的行(数千、数百万)。

提前感谢您的任何建议。

最佳答案

那么fetchAll()就不能如你所愿了。您需要使用 Zend_Db_Select 获取所有记录,然后通过循环执行您想要的操作

        $select = new Zend_Db_Select ($this->getFrontController()->getParam('bootstrap')->getResource ('Db'));
$statement = $select->from ('verses')->query ();
$statement->execute ();


while ($row = $statement->fetch ())
{
// try something like that
$db_row = new Zend_Db_Table_Row (array ('table' => $table, 'data' => $row));

$db_row->text = $db_row->text . '_';
$db_row->save ();

}

关于php - 使用具体的 Zend_Db_Table_Abstract 有效地遍历行集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6466699/

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