Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 分页查询耗尽内存_Php_Mysql_Limit - Fatal编程技术网

Php 分页查询耗尽内存

Php 分页查询耗尽内存,php,mysql,limit,Php,Mysql,Limit,我想将一个大表导出到CSV,因为不可能一次选择所有数据并导出,我打开一个文件句柄来编写并调用这个函数,它接受一个查询并在不同的页面中循环,我调用它的页面大小为20,实际上很小,但在执行一段时间后(可能30分钟),这会导致以下错误: Fatal error: Allowed memory size of 100663296 bytes exhausted (tried to allocate 85 bytes) in /usr/home/www/wp-includes/wp-db.php on l

我想将一个大表导出到CSV,因为不可能一次选择所有数据并导出,我打开一个文件句柄来编写并调用这个函数,它接受一个查询并在不同的页面中循环,我调用它的页面大小为20,实际上很小,但在执行一段时间后(可能30分钟),这会导致以下错误:

Fatal error: Allowed memory size of 100663296 bytes exhausted (tried to allocate 85 bytes) in /usr/home/www/wp-includes/wp-db.php on line 1402
这是函数,$fichero是alraedy打开的文件句柄,$pagina_size在上一次测试中的值为20:

function sql2csv_streamed($fichero, $sql, $pagina_size=50)
{
    global $wpdb;
    $limite1 = 0;
    $limite2 = $pagina_size-1;

    $sql_pagina = $sql . " limit $limite1,$limite2";
    error_log($sql_pagina);

    // Add all values in the table
    while ($rsSearchResults = $wpdb->get_results($sql_pagina, ARRAY_A))
    {
        foreach ( $rsSearchResults as $res )
        {
            fputcsv ($fichero, $res , ";");
        }
        $limite1 += $pagina_size;
        $limite2 += $pagina_size;

        $sql_pagina = $sql . " limit $limite1,$limite2";
        error_log($sql_pagina);
    }
}

谢谢

是的,它就像是20个20个选择的3.500条记录,然后一个接一个地循环写入一个文件,当内存溢出时,该文件就像6 MB大,而且还没有完成。3500条记录什么都不是。应该在几秒钟内轻松完成。当我创建一个永无止境的循环时,我会遇到类似的错误。也许你应该试着打印出一些变量,然后只打印五次(直到记录结束),看看它的运行速度有多快。在运行过程中,我正在跟踪csv文件,数据正在正确写入,直到我得到错误,也许查询很复杂,我不知道,我会照你说的做,谢谢。它工作正常,此外,在表的一个小副本中,它生成一个正确的CSV文件。您对limite变量的计算有些错误,您正在增加limite1和limite2,而您只想增加偏移量(limite1)。那会有帮助吗?