【问题标题】:PHP fputcsv outputting double recordsPHP fputcsv输出双记录
【发布时间】:2011-02-14 15:28:11
【问题描述】:

我正在使用这个 fputcsv 代码:

$result = mysql_query('SELECT * FROM `mash`');
if (!$result) die('Couldn\'t fetch records');
$fp = fopen('testCSV.csv', 'w');
if ($fp && $result) {
    while ($row = mysql_fetch_array($result)) {
        fputcsv($fp, array_values($row));
    }
    die;
}
fclose($fp);

它输出的 CSV 很好,但每个 mysql 列有两列(所以一切都加倍)

有人知道为什么会这样吗?

【问题讨论】:

  • 如果查询失败,你die,这会结束程序,所以以后检查$result不可能是假的,没有意义。在您关闭文件指针之前,您还可以在循环结束程序之后die。为什么?

标签: php mysql csv fputcsv


【解决方案1】:

试试这个:

$result = mysql_query('SELECT * FROM `mash`');
if (!$result) die('Couldn\'t fetch records');
$fp = fopen('testCSV.csv', 'w');
if ($fp && $result) {
    while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
        fputcsv($fp, array_values($row));
    }
    die;
}
fclose($fp);

mysql_fetch_array 默认返回一个组合数组,这将只返回关联数组。或者使用 MYSQL_NUM 编号 - http://php.net/manual/en/function.mysql-fetch-array.php

【讨论】:

  • 非常感谢您的回答。我遇到了这篇文章中描述的问题,您的回答完美地解决了我面临的问题。谢谢!
【解决方案2】:

http://php.net/manual/en/function.mysql-fetch-array.php

mysql_fetch_array 的第二个参数是这里的关键。默认是同时获取 assoc ant int 键。您可能想在此处传入 MYSQL_ASSOC。

【讨论】:

    【解决方案3】:

    mysql_fetch_array() 默认返回数字和关联索引

    引用手册(强调我的):

    返回一个字符串数组 对应于提取的行,或 如果没有更多行,则为 FALSE。这 返回数组的类型取决于如何 result_type 已定义。 通过使用 MYSQL_BOTH(默认),你会得到一个 具有关联和数字的数组 使用 MYSQL_ASSOC,您只需 获取关联索引(如 mysql_fetch_assoc() 有效),使用 MYSQL_NUM,你只能得到数字索引 (因为 mysql_fetch_row() 有效)。

    解决方案:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多