【问题标题】:Generate a .csv file with php using foreach and while使用 foreach 和 while 生成带有 php 的 .csv 文件
【发布时间】:2016-03-17 12:57:41
【问题描述】:

我试图生成一个 .csv 文件,但我得到这个文件是空的。 所以我的代码是:

$fileName = 'Users_' . date('d-m-Y') . '.csv';
$fh = fopen($fileName, "w");
fputcsv($fh, array('EMAIL', 'NAME','SURNAME'), ";");
foreach ($aDataBases as $database) {
    $sSql = sprintf('SELECT email, name, surname FROM users');
    $rResult = Mysqli::query($sSql, $database);
    while ($aRecord = $rResult->fetch_array(MYSQLI_ASSOC)){
       fputcsv($fh, $aRecord['email'], ";");
       fputcsv($fh, $aRecord['name'], ";");
       fputcsv($fh, $aRecord['surname'], ";",'"');
    }
}
fclose($fh);

文件已生成但为空,您能帮帮我吗?我做了一个 print_r() 并且查询执行后有数据。我做错了什么?

【问题讨论】:

    标签: php csv php-5.3 php-5.4


    【解决方案1】:

    你必须把这行改成

    while ($aRecord = $rResult->fetch_array(MYSQLI_ASSOC)){
        fputcsv($fh, $aRecord['email'], ";");
        fputcsv($fh, $aRecord['name'], ";");
        fputcsv($fh, $aRecord['surname'], ";",'"');
    }
    

    while ($aRecord = $rResult->fetch_array(MYSQLI_ASSOC)){
        fputcsv($fh, [$aRecord['email'], $aRecord['name'], $aRecord['surname']]);
    }
    

    在这里查看http://php.net/manual/en/function.fputcsv.php#refsect1-function.fputcsv-parameters second parameter should be an array 你错过了什么

    【讨论】:

    • 是的,这就是问题所在!
    【解决方案2】:

    fputcsv 的第二个参数应该是 array,但在您的代码示例中它是 string

    【讨论】:

      【解决方案3】:

      fputcsv的第二个参数是一个数组。

      你可以这样做:

      $fields = [];
      
      while ($aRecord = $rResult->fetch_array(MYSQLI_ASSOC)){
          $fields[] = $aRecord['email'];
          $fields[] = $aRecord['name'];
          $fields[] = $aRecord['surname'];
      
          fputcsv($fh, $fields);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多