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

标签 php mysql sql csv duplicates

我正在向 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_styleas documented将返回一个包含数字和命名关联键的数组,导致您在遍历数组时出现重复项。

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

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

关于php - 为什么 fputcsv 会产生重复的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485721/

相关文章:

sql - 在 SQL Server 中循环遍历行并自动为每一行添加一个列号

php - 在 codeigniter 中将行转换为列

MySQL-添加索引、链接表

sql - 使用 Oracle sql 根据父值更新子行

mysql - 插入表并跳过自动递增列,无需写入列名

python - 如何使用 Conda 安装 MySQLdb?

php - file_put_contents(文件路径/文件)[function.file-put-contents] : failed to open stream: Permission denied

php - Parse.com 检索数据 PHP

javascript - 循环数据表行

mysql - HQL 在子查询和子句中不起作用