在PHP中实现数据库表格导出时,添加列标题行能让导出的文件更清晰易读,方便后续数据整理和使用。常见的导出格式有CSV和Excel,下面分别介绍两种格式下添加列标题行的实现方式。

CSV格式导出添加列标题行
CSV是轻量的表格格式,PHP可通过输出流直接生成,添加列标题行只需要在输出数据前先写入字段名即可。
步骤说明
- 连接数据库并查询需要导出的数据,同时获取结果集的字段名作为列标题
- 设置正确的HTTP响应头,告诉浏览器返回的是CSV文件
- 打开输出流,先写入列标题行,再逐行写入数据内容
代码示例
<?php
// 数据库连接配置
$host = '127.0.0.1';
$user = 'root';
$pass = '123456';
$dbname = 'test_db';
$table = 'user_info';
// 连接数据库
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
// 设置响应头,指定导出为CSV文件
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="export_data.csv"');
// 打开输出流
$output = fopen('php://output', 'w');
// 获取列标题:查询表字段名
$result = $conn->query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='{$dbname}' AND TABLE_NAME='{$table}'");
$headers = [];
while ($row = $result->fetch_assoc()) {
$headers[] = $row['COLUMN_NAME'];
}
// 写入列标题行
fputcsv($output, $headers);
// 查询数据并写入
$dataResult = $conn->query("SELECT * FROM {$table}");
while ($row = $dataResult->fetch_assoc()) {
fputcsv($output, $row);
}
// 关闭资源
fclose($output);
$conn->close();
?>Excel格式导出添加列标题行
如果需求是导出Excel文件,可使用PHPExcel或者PhpSpreadsheet库,下面以PhpSpreadsheet为例说明。
步骤说明
- 安装PhpSpreadsheet库,可通过Composer完成依赖安装
- 创建Spreadsheet对象,获取活动工作表
- 将列标题写入第一行,再逐行写入数据内容
- 设置响应头并输出Excel文件
代码示例
<?php
require 'vendor/autoload.php';
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterXlsx;
// 数据库连接配置
$host = '127.0.0.1';
$user = 'root';
$pass = '123456';
$dbname = 'test_db';
$table = 'user_info';
// 连接数据库
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
// 创建Spreadsheet对象
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 获取列标题
$result = $conn->query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='{$dbname}' AND TABLE_NAME='{$table}'");
$headers = [];
while ($row = $result->fetch_assoc()) {
$headers[] = $row['COLUMN_NAME'];
}
// 写入列标题到第一行
$col = 1;
foreach ($headers as $header) {
$sheet->setCellValueByColumnAndRow($col, 1, $header);
$col++;
}
// 写入数据内容
$rowNum = 2;
$dataResult = $conn->query("SELECT * FROM {$table}");
while ($row = $dataResult->fetch_assoc()) {
$col = 1;
foreach ($row as $value) {
$sheet->setCellValueByColumnAndRow($col, $rowNum, $value);
$col++;
}
$rowNum++;
}
// 设置响应头输出Excel文件
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="export_data.xlsx"');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
$conn->close();
?>注意事项
- 导出CSV时建议设置字符编码为UTF-8,避免中文乱码问题
- 获取字段名时如果表名或数据库名是变量,要做好SQL注入防护,可提前校验变量合法性
- 如果导出的数据量很大,建议分批查询写入,避免内存占用过高