polygoncoin / exportcsv
导出/下载MySQL查询结果为CSV文件
v1.0.1
2024-07-04 15:05 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;
# ...
}