2014-02-10 70 views
0

我嘗試使用mssql數據庫中的選定行創建一個csv文件。 導出有效,但格式不正確。MSSQL選擇導出爲CSV

PHP:

require_once("config/config.php"); 

$connectionInfo = array("Database"=>DB_DB, "UID"=>DB_USER, "PWD"=>DB_PASSWORD); 
$conn = sqlsrv_connect(DB_HOST, $connectionInfo); 

if ($conn === false) { 
    die (print_r(sqlsrv_errors(), true)); 
} 

$sql = "SELECT * FROM [RC.Appointments]"; 
$result = sqlsrv_query($conn, $sql); 

if (!$result) die ('Couldn\'t fetch records'); 

$headers = array(); 

foreach (sqlsrv_field_metadata($result) as $fieldMetadata) { 
    $headers[] = $fieldMetadata['Name']; 
} 

$fp = fopen('php://output', 'w'); 
if ($fp && $result) { 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="export.csv"'); 
    header('Pragma: no-cache'); 
    header('Expires: 0'); 
    fputcsv($fp, $headers); 
    while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_NUMERIC)) { 
     fputcsv($fp, array_values($row)); 
    } 
    die; 
} 

不知道爲什麼,有沒有頭,我需要通過列中的數據獨立。 是否由缺少標題引起的問題?

在sublimetext

appointment_id,terminname,datum 
151,"Bitte Terminnamen vergeben",18.02.2014 
152,"Bitte Terminnamen vergeben",19.02.2014 
153,"Bitte Terminnamen vergeben",20.02.2014 
154,"Bitte Terminnamen vergeben",25.02.2014 
155,"Bitte Terminnamen vergeben",26.02.2014 
156,"Bitte Terminnamen vergeben",27.02.2014 
157,"Bitte Terminnamen vergeben",31.12.2014 
+0

請打開與編輯器(記事本)的輸出,在這裏,沒有張貼純粹的結果Excel中,因爲Excel沒有正確顯示整個內容(這是alwa的嘗試即時導入) –

+0

更新後的問題 – mnlfischer

回答

2

輸出如從與sublimetext所述第二輸出,所述$headers陣列不包含任何東西。

所以需要檢查語句$headers[] = sqlsrv_get_field($result , $i);

,因爲它是進一步傾銷陣列,而不是打印出來的,我會嘗試:fputcsv($fp, array_values($headers));

爲了得到這個用Excel正確解釋,更改分隔符;fputcsv($fp, array_values($headers), ';');

+0

好了,算出來,這是獲得與field_metadata列名稱的唯一方法。用當前輸出更新我的問題。當我添加fputcsv($ fp,array_values($ headers),';');我得到相同的輸出,但值始終是標題。 – mnlfischer

+0

橡木它與';'分隔符!謝謝 ! – mnlfischer

0

的問題是,sqlsrv_get_field ()返回當前字段中的數據而不是名稱,並且必須通過調用sqlsrv_fetch()將其設置爲使用正確的索引。但這不是你想要做的。你需要做的是讓這是可以做到這樣的標題:

foreach(sqlsrv_field_metadata($result) as $fieldMetadata) 
{ 
    $headers[] = $fieldMetadata['Name']; 
} 

和被已經指出的亞歷克斯寫頭以csv文件正確的方法是:

fputcsv($fp, array_values($headers)); 

現在作爲文件顯示在Excel中,你可以使用文本導入嚮導導入文件的方式解釋here