123jixinyu 发表于 2016-6-2 12:38:26

Memory limit of 10240 KB exceeded for buffered query

本帖最后由 Closer 于 2016-6-2 13:36 编辑

$query=$this->db->query($sql);
大概4000条数据,就超过了缓冲限制,在不改变数据库的情况下,有没有什么其他方法

123jixinyu 发表于 2016-6-2 12:38:51

来人啊

Closer 发表于 2016-6-2 13:38:06

修改 php.ini 中的記憶體使用上限

123jixinyu 发表于 2016-6-2 13:51:22

不配置php.ini呢,还是其他方法吗?比如说还有什么函数可以避开缓冲的,例如mysql原生的unbuffered_query,那么在CI 下还有类似的方法吗?

Closer 发表于 2016-6-2 16:18:02

123jixinyu 发表于 2016-6-2 13:51
不配置php.ini呢,还是其他方法吗?比如说还有什么函数可以避开缓冲的,例如mysql原生的unbuffered_query, ...
與 CI 較無關係,單純只是資料量太大了
也許你可以考慮增加搜尋條件,或善用 select
不然就是一次只拿 1000 筆資料,用 foreach 去紀錄拿到的資料
這樣佔的就是 PHP 的記憶體

 

123jixinyu 发表于 2016-6-2 18:03:23

Closer 发表于 2016-6-2 16:18
與 CI 較無關係,單純只是資料量太大了
也許你可以考慮增加搜尋條件,或善用 select
不然就是一次只拿 100 ...

这种想法我也想过,但是首先需要获取查询结果数量,才能分批查询。怎么直接获取查询结果数量(需要绕过query,因为一遇到query就会溢出)

Closer 发表于 2016-6-2 18:09:22

本帖最后由 Closer 于 2016-6-2 18:13 编辑

123jixinyu 发表于 2016-6-2 18:03
这种想法我也想过,但是首先需要获取查询结果数量,才能分批查询。怎么直接获取查询结果数量(需要绕过que ...
一樣可以用 query 去 count 筆數

你記憶體不夠是一次性的 query 量太大
除了筆數,更重要的是 select 欄位內容量太多

所以應該可以算筆數,再去分組 query
static/image/hrline/line3.png
count 請參考 : CI 手冊 - 查詢構造器類

 

123jixinyu 发表于 2016-6-2 18:26:52

Closer 发表于 2016-6-2 18:09
一樣可以用 query 去 count 筆數

你記憶體不夠是一次性的 query 量太大


不可以的,只能传入表,不能传入SQL

123jixinyu 发表于 2016-6-2 18:44:15

:'(求来人啊
页: [1]
查看完整版本: Memory limit of 10240 KB exceeded for buffered query