我在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"
是什么导致重复,我们如何摆脱它们?
PDO方法fetchAll()具有一个参数fetch_style,如所记载,该参数将返回带有数字键和命名关联键的数组,从而使您在遍历数组时有重复项。
fetchAll()
fetch_style
您可以使用此处记录的PDO Fetch常量之一进行设置- 它们都以开头,PDO::FETCH_并使用该常量来获取关联数组(PDO::FETCH_ASSOC)或数值数组(PDO::FETCH_NUM)。
PDO::FETCH_
PDO::FETCH_ASSOC
PDO::FETCH_NUM
return $statement->fetchAll(PDO::FETCH_ASSOC);