我有一个php函数,可以记录我的数据库中表的所有记录。
当我的记录超过20'000时,此功能停止工作。
如果我执行$all = MyModel::model()->findAll();
脚本失败,我不知道为什么。
但是限制$all = MyModel::model()->findAllBySql('select * from tableName limit 10000');
一切正常。
如果我设定超过15'000(或多或少)的限制不再有效。
我不知道为什么会产生这个问题。 也许对于我存储记录的变量的内存使用情况? 数据库超时? (获取所有行不需要太长时间:3-4秒)
有人知道答案吗?有一个解决方法吗?
谢谢大家
答案 0 :(得分:1)
我认为你来自PHP的memory_limit
。您可以在apache日志文件中进行检查。在那里你可以看到像
Fatal error: Allowed memory size of *** bytes exhausted
我更愿意实现Iterator接口。然后,您可以逐步浏览数据,而无需将所有记录保存在一个变量中。
http://php.net/manual/de/class.iteratoraggregate.php
http://www.php.net/manual/de/class.iterator.php
答案 1 :(得分:0)
检查
https://stackoverflow.com/a/18679817/2600397
Willem Renzema建议使用CDataProviderIterator,因为这并不能保留记忆中的全套记录。