Php 从数据库查询并将结果写入文本文件

Php 从数据库查询并将结果写入文本文件,php,mysql,Php,Mysql,我有一个查询,从数据库表中选择all并将其写入文本文件。如果状态很小(比如最多200k行),代码仍然可以工作并将其写入文本文件。当我有一个查询时有2M行的状态时,问题就出现了,然后还有一个事实,表有64列 下面是代码的一部分: 创建并打开文件 问题是,它只写到第200kt行,而不写剩余的1.8m行 如果我不限制查询,它会遇到内存不足的错误。TIA提供任何类型的建议。首先,您需要使用缓冲区查询来获取数据 默认情况下,查询使用缓冲模式。这意味着查询结果会立即从MySQL服务器传输到PHP,然后保存在

我有一个查询,从数据库表中选择all并将其写入文本文件。如果状态很小(比如最多200k行),代码仍然可以工作并将其写入文本文件。当我有一个查询时有2M行的状态时,问题就出现了,然后还有一个事实,表有64列

下面是代码的一部分:

创建并打开文件 问题是,它只写到第200kt行,而不写剩余的1.8m行


如果我不限制查询,它会遇到内存不足的错误
。TIA提供任何类型的建议。

首先,您需要使用缓冲区查询来获取数据

默认情况下,查询使用缓冲模式。这意味着查询结果会立即从MySQL服务器传输到PHP,然后保存在PHP进程的内存中

无缓冲MySQL查询执行查询,然后在数据仍在MySQL服务器上等待提取时返回资源。这在PHP端使用更少的内存,但会增加服务器上的负载。除非从服务器获取完整的结果集,否则无法通过同一连接发送进一步的查询。无缓冲查询也可以称为“使用结果”

注意:如果您只期望有限的结果集,或者在读取所有行之前需要知道返回行的数量,则应使用缓冲查询。当您希望获得更大的结果时,应使用无缓冲模式。

此外,还要优化数组,尝试直接放置变量,而您只需执行循环

pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$uresult = $pdo->query("SELECT * FROM tbl_two WHERE STE='48' LIMIT 200000");
        if ($uresult) {
            $lineno = 0;
           while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
               echo $row['Name'] . PHP_EOL;
           // write value in text file  
           $lineno++;
           }
        }

所有可能的答案如果你对64个不同的变量进行复制粘贴,你真的需要查找如何使用
array()
和循环。我有一个大数据结果,b。这样我就不会占用很多内存了。我想,你可以试着检查一下。
$qry = "SELECT * FROM tbl_two WHERE STE='48' LIMIT 200000";
pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$uresult = $pdo->query("SELECT * FROM tbl_two WHERE STE='48' LIMIT 200000");
        if ($uresult) {
            $lineno = 0;
           while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
               echo $row['Name'] . PHP_EOL;
           // write value in text file  
           $lineno++;
           }
        }