如何在PHP导出的CSV文件中包含表头列名?
给导出CSV的PHP代码添加表头列名
你的代码目前靠手动拼接每行数据导出,但确实缺少表头,而且手动拼接的方式很容易出问题——比如字段内容里带引号、逗号时,会直接破坏CSV的格式。推荐用PHP内置的fputcsv()函数来处理,既能省心保证格式正确,还能顺便加上表头。
修改后的完整代码如下:
<?php $host = 'host'; $mydatabase = 'db'; $user = 'user'; $pass = 'pass'; try { $db = new PDO('mysql:host='.$host.';dbname='.$mydatabase, $user, $pass); } catch (PDOException $e) { echo "Error: " . $e->getMessage(); die(); } $sql = 'SELECT * FROM table ORDER BY id '; $stmt = $db->prepare($sql); $stmt->execute(); // 打开CSV文件准备写入 $file = 'table.csv'; $f = fopen($file, 'w'); if (!$f) { die("无法打开文件进行写入"); } // 自动获取表头列名 $columnNames = []; $columnCount = $stmt->columnCount(); for ($i = 0; $i < $columnCount; $i++) { $meta = $stmt->getColumnMeta($i); $columnNames[] = $meta['name']; } // 写入表头行 fputcsv($f, $columnNames); // 循环写入数据行 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { fputcsv($f, $row); } fclose($f); ?>
关键修改说明:
- 替换手动拼接字符串为
fputcsv(),它会自动处理字段里的引号、逗号等特殊字符,避免CSV格式出错 - 通过
$stmt->columnCount()和getColumnMeta()自动获取查询结果的列名,作为表头写入文件开头,适配表结构变化 - 直接把
fetch_assoc得到的数组传给fputcsv(),不用手动逐个写字段,后续表字段增减也不用修改代码
如果你需要固定表头(不想自动获取),也可以直接手动定义,比如$columnNames = ['id', 'name', 'surname', 'etc'];,效果一样。
内容的提问来源于stack exchange,提问作者Fash
相关产品推荐
相关产品推荐

