小编典典

为什么fputcsv产生重复的列?

sql

我在WordPress网站上添加了一个下载按钮,该按钮将查询我们的数据库,并以CSV格式提供结果。

一切正常, 除了生成的CSV对于返回的每一列都有一个重复的列。

我们已经检查了SQL查询,它没有重复项。

这是我们生成CSV的方法:

$rows = //Call to SQL query function
$fp = fopen('php://output', 'w');
fputcsv($fp, array_keys($rows));

foreach ($rows as $row) {
  fputcsv($fp, $row);
}

$filename = "EventResults.csv";
header('Content-Type: text/csv');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=$filename");

我们将SQL返回值转换为如下所示的PHP数组:

 $sql = "SELECT * FROM TABLE";
 $statement = $this->db->prepare($sql);
 $statement->execute();
 return $statement->fetchAll();

结果看起来像这样:

Lance,Lance,Armstrong,Armstrong,DEX,DEX,70,70,1,1,60,60,SEC,SEC,"10; 20; 30; 40","10; 20; 30; 40"

他们什么时候看起来应该像这样:

Lance,Armstrong,DEX,70,1,60,SEC,"10; 20; 30; 40"

是什么导致重复,我们如何摆脱它们?


阅读 155

收藏
2021-04-14

共1个答案

小编典典

PDO方法fetchAll()具有一个参数fetch_style如所记载,该参数将返回带有数字键和命名关联键的数组,从而使您在遍历数组时有重复项。

您可以使用此处记录的PDO Fetch常量之一进行设置-
它们都以开头,PDO::FETCH_并使用该常量来获取关联数组(PDO::FETCH_ASSOC)或数值数组(PDO::FETCH_NUM)。

return $statement->fetchAll(PDO::FETCH_ASSOC);
2021-04-14