使用PHP fputcsv导出MySQL数据为CSV仅出现列头无数据求助
问题排查步骤及解决方案
1. 修正fetch_assoc调用语法错误
核心问题为结果集读取方法调用错误,PHP原生没有全局fetch_assoc函数,如果你使用的是mysqli扩展,正确写法是调用结果集对象的fetch_assoc()方法:
原错误代码:
while ($row = fetch_assoc($rows)) {fputcsv($output, $row);}
修正后:
while ($row = $rows->fetch_assoc()) {fputcsv($output, $row);}
如果使用PDO扩展,对应的写法是:
while ($row = $rows->fetch(PDO::FETCH_ASSOC)) {fputcsv($output, $row);}
2. 验证SQL查询有效性
- 将你的SQL语句直接在MySQL客户端(如phpMyAdmin、Navicat)中执行,确认
WHERE Current = '1'条件能匹配到有效数据 - 如果
Current字段是数值类型,去掉值的单引号,避免隐式类型转换导致匹配失败:
SELECT Club_Name,BHS,Title,Type,Forename,Surname,Address1,Address2,Address3,Address4,Postcode,Phone,Email,Mobile FROM tvrc_members WHERE Current = 1
3. 增加错误判断排查运行异常
在查询执行前后增加错误判断,定位是否存在数据库连接、权限或者语法错误:
// 验证数据库连接 if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } $sql = "SELECT Club_Name,BHS,Title,Type,Forename,Surname,Address1,Address2,Address3,Address4,Postcode,Phone,Email,Mobile FROM tvrc_members WHERE Current = '1'"; $rows = $conn->query($sql); // 验证查询执行结果 if (!$rows) { die("查询执行失败: " . $conn->error); }
4. 终止脚本避免额外输出污染
CSV输出完成后立即终止脚本执行,避免foot.php输出的额外内容(空格、报错信息、HTML代码等)破坏CSV结构,甚至覆盖业务数据:
while ($row = $rows->fetch_assoc()) { fputcsv($output, $row); } fclose($output); // 新增终止执行语句 exit; require('foot.php');
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

