2017-12-13 20 views
0
$conn = mysql_connect($entr,$user,$cred);   //Set db connection 
mysql_select_db("webshops",$conn); 
$result = mysql_query('CALL storedproc');  


$num_column = mysql_num_fields($result);     //Get number of columns, for each column header get name and give them individual columns.  
for($i=0;$i<$num_column;$i++) { 
    $csv_header .= '"' . mysql_field_name($result,$i) . '";'; 
} 
$csv_header .= "\n"; 

$csv_row ='';        
while($row = mysql_fetch_row($result)) { 
    for($i=0;$i<$num_column;$i++) { 
     $csv_row .= '"' . $row[$i] . '";'; 
    } 
    $csv_row .= "\n"; 
} 
ob_end_clean(); 

header('Content-type: application/csv'); 
header('Content-Disposition: attachment; filename=OrderExport.csv'); 
echo $csv_header . $csv_row; 
exit; 

このCSVをダウンロードしてExcelで開くと、最初の行は常に空白になります。ヘッダーは2行目から始まります。これを防ぐにはどうしたらいいですか?最初にヘッダーを開始しますか?どうもありがとう。このCSVエクスポートの先頭に空白の行があり、どうすれば削除できますか?

+0

**危険**:あなたは[**廃止**データベースAPI](http://stackoverflow.com/q/12859942/19068)を使用しています**削除**完全にからPHPの最新バージョン。 [現代的な代替品](http://php.net/manual/en/mysqlinfo.api.choosing.php)を使用してください。 – Quentin

+0

コードを正しくインデントする方法を学んでください。読むのがずっと楽になります(そして他の人があなたを助けるために)。 – Quentin

+5

いつ人々が自分の悪いcsvコードを書こうとするのを止め、PHPのビルトイン[fputcsv()](http://php.net/manual/en/function.fputcsv.php)機能を使用し始めるのですか –

答えて

2

fputcsv http://php.net/manual/en/function.fputcsv.phpを使用する方がよいでしょう。私は以下のコードを変更しましたが、テストすることができませんので、完全には動作しないかもしれませんが、うまくいけばそれはあなたにアイデアを与えるでしょう。また、コメント内で他の人が言っているように、mysqlは使用しないでください。そのAPIは時代遅れです。代わりにmysqliを使用してください。

$conn = mysql_connect($entr,$user,$cred);   
mysql_select_db("webshops",$conn); 
$result = mysql_query('CALL storedproc');  
$num_column = mysql_num_fields($result);      

$fp = fopen('mycsv.csv', 'w'); 
$csv_header = array(); 

for($i=0;$i<$num_column;$i++) { 
    array_push($csv_header, mysql_field_name($result,$i)); 
} 

fputcsv($fp, $csv_header); 

while($row = mysql_fetch_row($result)) { 
    $csv_row = array();   
    for($i=0;$i<$num_column;$i++) { 
     array_push($csv_row, $row[i]); 
    } 
    fputcsv($fp, $csv_row); 
} 
ob_end_clean(); 

header('Content-type: application/csv'); 
header('Content-Disposition: attachment; filename=OrderExport.csv'); 
fclose($fp); 
exit; 
0

出力するためのより信頼性が高く正確な方法でストアドプロシージャからの結果は、データベース操作とを処理するためmysqli又はPDOを使用内蔵fputcsv CSV出力のために特別にデータをフォーマットします。

<?php 

    /* File will be called this when it is downloaded */   
    $filename = 'mycsvfile.csv'; 

    /* create db connection using mysqli (or PDO) but not mysql */  
    $dbhost = 'localhost'; 
    $dbuser = 'root'; 
    $dbpwd = 'xxx'; 
    $dbname = 'xxx'; 
    $conn = new mysqli($dbhost, $dbuser, $dbpwd, $dbname); 

    /* create sql query */ 
    $sql='call `storedproc`();'; 

    /* run the query */ 
    $result=$conn->query($sql); 
    if($result){ 

     /* store column names in this array - used to create csv headers */ 
     $cols=array(); 

     /* iterate through column names and add to array $cols */ 
     array_walk($result->fetch_fields(), function($value, $key, $cols){ 
      $cols[]=$value->name; 
     },&$cols); 

     /* create an output stream to write csv to */ 
     $stream=fopen('php://output', 'w'); 
     /* add column headers */ 
     fputcsv($stream, $cols); 

     /* iterate through the recordset returned by stored procedure */ 
     while($rs=$result->fetch_assoc()){ 
      fputcsv($stream, array_values($rs)); 
     } 
     /* capture stream contents */ 
     $data=stream_get_contents($stream); 

     /* close the output stream */ 
     fclose($stream); 

     /* send headers and write content to browser */ 
     header('Content-Type: application/csv'); 
     header('Content-Disposition: attachment; filename=' . $filename); 
     exit($data); 
    } 
?> 
関連する問題