Jon*_*ett 6 php zend-framework zend-db
我正在使用Zend_Db_Table_Abstract的具体实现:
class DB_TestClass extends Zend_Db_Table_Abstract {
protected $_name = "test.TestData";
}
Run Code Online (Sandbox Code Playgroud)
如果我想要选择表中的所有行,我似乎有一个选项:
$t = new DB_TestClass;
$rowset = $t->fetchAll();
Run Code Online (Sandbox Code Playgroud)
这将返回Zend_Db_Table_Rowset的一个实例,该实例具有可循环的可迭代接口,并作为rowClass实例访问每个行条目:
foreach($rowset as $row) {
var_dump($row);
}
Run Code Online (Sandbox Code Playgroud)
但是,行集已经将数据库中的每一行加载到内存中(!)在小表上这没关系,但是在大型表 - 例如数千行 - 它很快耗尽了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 ();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
674 次 |
最近记录: |