我正在向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"
导致重复的原因是什么,我们如何摆脱它们?
答案 0 :(得分:6)
PDO方法fetchAll()
有一个参数fetch_style
,as documented将返回一个包含数字和命名关联键的数组,当你遍历数组时会导致重复。
您可以使用其中一个记录为here的PDO Fetch常量来设置它 - 它们都以PDO::FETCH_
开头并使用它来获取关联数组(PDO::FETCH_ASSOC
)或数值数组(PDO::FETCH_NUM
)
return $statement->fetchAll(PDO::FETCH_ASSOC);
答案 1 :(得分:0)
这在MSSQL中可以防止重复的列:
while ( $row = mssql_fetch_array($results, MSSQL_ASSOC) ) {
fputcsv($fp, $row);
}