【发布时间】: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 的系统上查看文件,因此所有行都相互覆盖。
-
如果您查看文件的十六进制转储,您是否看到所有行?