2016-08-17 15 views
1

以下の非常に単純なコードを使用して、MySQLテーブルのすべてのデータ "members"のCSVをエクスポートします。しかし、MySQLテーブルには合計560行ありますが、CSVはMySQLテーブルの行のうち559個しか表示しません(最初のデータベースのテーブルの行は表示されません)。なぜこれが、または私はこの問題を解決するために自分のコードで変更することができます知っていますか?PHP fputcsvがSQLクエリから最初の行を出力しない(最初の行の後に他のすべての行を出力する)

// BEGIN EXPORT ALL FROM EDITOR 
if(isset($_POST['export_csv'])) { 
    $today_date = date('Y-m-d_h-i-s-a', time()); 
    $FileName = "download/report_mailing_list_export_".$today_date.".csv"; 
    $file = fopen($FileName,"w"); 

     $sql = mysqli_query($dbc, "SELECT * FROM member WHERE memberid != 1 AND deleted=0 AND website = 0 ORDER BY last_name, first_name DESC"); 

     $row = mysqli_fetch_assoc($sql); 
    // Save headings alon 
     $HeadingsArray=array(); 
     foreach($row as $name => $value){ 
      $HeadingsArray[]=$name; 
     } 

     fputcsv($file,$HeadingsArray); 

    // Save all records without headings 
     while($row = mysqli_fetch_assoc($sql)){ 
     $valuesArray=array(); 
      foreach($row as $name => $value){ 
      $valuesArray[]=$value; 
      } 
     fputcsv($file,$valuesArray); 
     } 
     fclose($file); 

    header("Location: $FileName"); 
} 
// END EXPORT 
+0

関連:http://stackoverflow.com/questions/38916163/php-regular-backup-of-mysql-data/38916164#38916164 – e4c5

答えて

2

あなたはmysqli_fetch_assoc($ sql)を呼び出します。 whileループの前に、最初の行を繰り返します。あなたはこのような何かにそれを変更することがあります。この場合

// BEGIN EXPORT ALL FROM EDITOR 
if(isset($_POST['export_csv'])) { 
    $today_date = date('Y-m-d_h-i-s-a', time()); 
    $FileName = "download/report_mailing_list_export_".$today_date.".csv"; 
    $file = fopen($FileName,"w"); 

     $sql = mysqli_query($dbc, "SELECT * FROM member WHERE memberid != 1 AND deleted=0 AND website = 0 ORDER BY last_name, first_name DESC"); 

     $row = mysqli_fetch_assoc($sql); 
    // Save headings alon 
     $HeadingsArray=array(); 
     foreach($row as $name => $value){ 
      $HeadingsArray[]=$name; 
     } 

     fputcsv($file,$HeadingsArray); 

    // Save all records without headings 
     do { 
      $valuesArray=array(); 
      foreach($row as $name => $value){ 
       $valuesArray[]=$value; 
      } 
      fputcsv($file,$valuesArray); 
     } while($row = mysqli_fetch_assoc($sql)); 
     fclose($file); 

    header("Location: $FileName"); 
} 
// END EXPORT 

、あなたが最初の反復から$rowを再利用します。

+0

'fputcsv($ file、$ HeadingsArray); \t \t do { //ループ本体 \t \t while($ row = mysqli_fetch_assoc($ sql)); \t //見出しなしですべてのレコードを保存する \t \t $ valuesArray = array(); \t \t \t foreach($ row = $ name = $ value){ \t \t \t $ valuesArray [] = $ value; \t \t \t \t \t fputcsv($ file、$ valuesArray); \t \t} 'うまくいかないようです。 'Parse error:構文エラー、予期しない 'fclose'(T_STRING)、while(T_WHILE)' – Kelsey

+0

が本体をループすることによって、 '$ valuesArray = array(); \t \t \t foreach($ row = $ name = $ value){ \t \t \t $ valuesArray [] = $ value; \t \t \t \t \t fputcsv($ file、$ valuesArray); '、do {}'の内部? – Kelsey

+0

コードを更新しました。 – Nosyara

関連する問題