我的csv文件只获得一行

时间:2012-11-25 15:17:16

标签: php

我正在输出一个临时表到csv文件,但它只获得一行?

这是代码

$fileName = fopen('cmv_sailings.csv', 'w');

while ($i = mysql_fetch_assoc($export)) {
    $ship = $i['code'];
    $title = $i['title'];
    $sailDate = $i['sailDate'];
    $fromPort = $i['fromport'];
    $nights = $i['nights'];
    $grade = $i['type'];
    $fare = $i['fare'];
    $offer = $i['offerFare'];
    $deposit = $i['deposit'];

    $content = $ship.','.$title.','.$sailDate.','.$fromPort.','.$nights.','.$grade.','.$fare.','.$offer.','.$deposit.'\n';

    fwrite($fileName, $content);
}

fclose($filename);

我现在还没有线索。我试图使用fputcsv,但我不能让它工作

4 个答案:

答案 0 :(得分:3)

在您的代码中,在$content变量分配结束时,将'\n'更改为"\n"。在php中,使用单引号时不会插入转义序列。使用双引号时会对它们进行插值。你得到一个字面反斜杠,然后是文字n,而不是你正在寻找的换行符。

至于使用fputcsv(),由于您的平台使用了错误的换行符,这可能对您不起作用。这发生在Mac上。如果这是您的问题,请尝试在文件解析代码之前启用auto_detect_line_endings。您可以使用ini_set()在运行时执行此操作:

ini_set('auto_detect_line_endings', '1');

答案 1 :(得分:0)

$content = $ship. ... .'\n';

您要在文件中附加反斜杠和n,而不是换行符。试试这个:

$content = $ship. ... ."\n";

答案 2 :(得分:0)

像这样使用,我在你的代码中看到的主要问题是使用单引号\ n这就是为什么新的行字符没有被添加到你的csv文件中而你得到的结果是一行

$content = $ship.','.$title.','.$sailDate.','.$fromPort.','.$nights.','.$grade.','.$fare.','.$offer.','.$deposit."\n";
fwrite($fileName, $content);

答案 3 :(得分:0)

  1. 使用mysql_不是一个好主意,现在好了,但将来会迁移到PDO或mysqli
  2. 手动准备CSV,不是一个好主意,必须转义特殊字符,使用fputcsv description here
  3. 为什么你的CSV中只有一行,我认为是因为格式化问题(或缺少格式化),来自你的格式化方式。