【问题标题】:PHP copying the result from a SQL Query into a CSV file writes only the last linePHP 将 SQL 查询的结果复制到 CSV 文件中只写入最后一行
【发布时间】:2020-01-11 10:31:48
【问题描述】:

我正在尝试从我对 Oracle 执行的查询中获取一些结果并将它们粘贴到 CSV 文件中,问题是,在 foreach 循环中,代码应该逐行写入,但他只写最后一行,我无法理解原因。

在代码中,我编写了 csv 文件的标题,如下所示,这部分写在 csv 文件中,但是当我开始 foreach 循环时,他“看到”每一行(因为我试图做一个var_dump 在每个循环),但他只写最后一个。

$res->rows 是包含查询输出的行的变量。

$handle = fopen(Configuration::EXPORT_UPLOAD_PATH . DIRECTORY_SEPARATOR . explode('.', self::UPDATE_STATO_LIBRO_QUESTURA_TEMPLATE_FILE_NAME)[0] . '_BU_' . date("dmY") . '.csv', "w");
fwrite($handle, self::LIBRO_QUESTURA_UPDATE_COLUMN_NAME_NUMERO_PROTOCOLLO . ';');
fwrite($handle, self::LIBRO_QUESTURA_UPDATE_COLUMN_NAME_TRANCHE_MASSIVA . '_OLD;');
fwrite($handle, self::LIBRO_QUESTURA_UPDATE_COLUMN_NAME_TIPO_MANDATO . '_OLD;');
fwrite($handle, self::LIBRO_QUESTURA_UPDATE_COLUMN_NAME_COND_ECONOMICHE . '_OLD;');
fwrite($handle, self::LIBRO_QUESTURA_UPDATE_COLUMN_NAME_NUMERO_CONTRATTO . '_OLD' . PHP_EOL);
foreach($res->rows as $libroQuestura) {
    fputcsv($handle, $libroQuestura, ";");
}
fclose($handle);

【问题讨论】:

  • 我怀疑 PHP 正在使用 CR 换行符写入文件,但您正在使用 LF 的系统上查看文件,因此所有行都相互覆盖。
  • 如果您查看文件的十六进制转储,您是否看到所有行?

标签: php sql oracle csv


【解决方案1】:

使用 fopen - 将内容附加到文件使用 'a' 参数而不是 'w'

【讨论】:

  • 你说得对,太傻了,大概是我累了
  • 只要你破解了:)
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多