php – 为什么fputcsv会产生重复的列?

我正在向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,其中as documented将返回一个包含数字和命名关联键的数组,这会导致迭代数组时出现重复.

您可以使用记录在案的here中的一个PDO Fetch常量来设置它 – 它们都以PDO :: FETCH_开头并使用它来获取关联数组(PDO :: FETCH_ASSOC)或数字数组(PDO :: FETCH_NUM)

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...