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

标签 php zend-framework zend-db

我正在使用 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/

相关文章:

mysql - ZF3 - Zend\Db\Sql\Predicate\Expression - SQL DATE_FORMAT 上的错误转义

php - Joomla 模板调整模块位置

php - 配置 Zotero 服务器

php - 自定义 SEO Yoast 的元标记

php - Zend 1 3d party NameSpaces 自动加载不起作用

php - Zend Framework 1.9 从数据库查询中填充复选框

php - 需要mysql查询表中一列下的多个标志

php - 解析php数据以仅获取单个数据

php - Zend 框架。在单行中添加表单元素

mysql - Zend_Db查询Mysqli准备错误: Operand should contain 1 column(s)