polygoncoin/exportcsv

导出/下载MySQL查询结果为CSV文件

v1.0.1 2024-07-04 15:05 UTC

This package is auto-updated.

Last update: 2024-09-04 15:30:02 UTC


README

导出/下载MySQL查询结果为CSV文件

在下载CSV时,大多数情况下,开发者会面临PHP内存限制的问题;尤其是在支持一次性下载超过30,000条记录时。

以下类通过从PHP脚本执行服务器上安装的MySql客户端的shell命令来解决此问题。使用此类,可以一次性下载所有记录。SQL查询返回的行数没有限制。

示例

下载导出CSV

require "ExportCSV.php"

define('HOSTNAME', '127.0.0.1'); 
define('USERNAME', 'username'); 
define('PASSWORD', 'password'); 
define('DATABASE', 'database'); 

$sql = "
    SELECT
        column1 as COLUMN1,
        column2 as COLUMN2,
        column3 as COLUMN3,
        column4 as COLUMN4
    FROM
        TABLE_NAME
    WHERE
        column5 = :column5
        column6 LIKE CONCAT('%' , :column6, '%');
        column7 IN (:column7);
";

$params = [
    ':column5' => 'column5_value',
    ':column6' => 'column6_search_value',
    ':column7' => [
        'column7_value1',
        'column7_value2',
        'column7_value3'
    ]
];

$csvFilename = 'export.csv'; 

try { 
  $exportCSV = new ExportCSV(); 
  $exportCSV->connect(HOSTNAME, USERNAME, PASSWORD, DATABASE);
  $exportCSV->useTmpFile = false; // defaults true for large data export.
  $exportCSV->initDownload($csvFilename, $sql, $params);
} catch (\Exception $e) { 
  echo $e->getMessage(); 
} 

将CSV结果导出到文件中。

$csvAbsoluteFilePath = '/<folder path>/<filename>.csv'; 

try { 
  $exportCSV = new ExportCSV(); 
  $exportCSV->connect(HOSTNAME, USERNAME, PASSWORD, DATABASE);
  $exportCSV->saveCsvExport($csvAbsoluteFilePath, $sql, $params); 
} catch (\Exception $e) { 
  echo $e->getMessage(); 
}

同时下载并导出CSV结果到文件中。

$csvAbsoluteFilePath = '/<folder path>/<filename>.csv'; 

try { 
  $exportCSV = new ExportCSV();
  $exportCSV->connect(HOSTNAME, USERNAME, PASSWORD, DATABASE);
  $exportCSV->initDownload($csvFilename, $sql, $params, $csvAbsoluteFilePath);
} catch (\Exception $e) { 
  echo $e->getMessage(); 
} 

压缩

如果浏览器支持压缩,要启用NGINX中动态生成的CSV文件的下载压缩,可以在NGINX配置文件中使用gzip_types指令。

gzip_types指令用于指定应压缩哪些MIME类型。

以下是启用NGINX中动态生成CSV文件下载压缩的示例

http {
    # ...
    gzip on;
    gzip_types text/plain text/csv;
    # ...
}