如何使用 PDO 正确地对大型查询进行分页以避免 "out of memory" 错误?

How to paginate a large query correctly with PDO to avoid "out of memory" errors?

我有一个非常大的 table,我想在 PHP 中逐行处理。

这是我尝试过的:

所以我的问题:

或者您还有其他更好的解决方案吗?

可能我不明白你的问题...但是,我创建了一个简单的脚本,它用 ~ 5,436,226 行(和 19 列)迭代来自 table 的所有值,并将其保存到out文件中。我改用 PostgeSQL MySQL(但我认为这不是问题,您必须只更改 LIMIT 部分)。

<?
ini_set('memory_limit', '100M');

$pdo  = new PDO('pgsql:host=localhost;port=5432;dbname=test', 'postgres', 'postgres');
$page = 0;
while ($pdo) {
    echo ($page++).PHP_EOL;
    $stmt = $pdo->prepare('SELECT * FROM table ORDER BY id LIMIT 100 OFFSET '.($page*100));
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    file_put_contents('/var/www/test/tmp/out.txt', json_encode($rows), FILE_APPEND);
}

输出文件大小约为 1 Gb。