You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP从当前会话导出CSV文件出现列数据重复问题该如何解决?

问题根因

核心原因是PDO查询结果默认返回混合格式数组:
PDO的fetch()方法默认使用PDO::FETCH_BOTH作为提取模式,返回的数组同时包含数字索引(0、1、2……)和关联索引(字段名)两类下标,每列的值会在数组中重复出现两次。调用fputcsv()写入文件时会遍历数组所有元素,最终表现为CSV每列数据重复。

修复方法

修改fetch()的提取模式,指定仅返回关联数组或者仅返回数字索引数组即可:

// 方案1:仅返回关联数组(下标为表字段名)
while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
    fputcsv($fh, $row);
}

// 方案2:仅返回数字索引数组
while ($row = $q->fetch(PDO::FETCH_NUM)) {
    fputcsv($fh, $row);
}
其他需要修复的代码隐患
  • 变量作用域错误:$db是全局变量,在process()函数内使用前需要加global $db;声明,否则会抛出未定义变量错误
  • Session键名不匹配:你存入Session的是$_SESSION['user'] = $_POST['first_name'],但查询时使用的是$_SESSION['user_fname'],会导致查询条件为空,无法匹配到刚插入的数据
  • Header格式错误:Content-disposition头中filename后面应该用等号而非冒号,正确写法为header('Content-Disposition: attachment; filename=info.csv');
  • SQL注入风险:直接将变量拼接进SQL语句,建议改用预处理查询规避风险
  • 验证函数逻辑不严谨:validate()函数验证失败时没有显式返回false,可能导致逻辑异常

内容的提问来源于stack exchange,提问作者di3po

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:06:00