簡體   English   中英

MSSQL選擇導出為CSV

[英]MSSQL Select export to 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

從帶有sublimetext的第二個輸出開始, $headers數組不包含任何內容。

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

因為它進一步轉儲數組而不是打印它,我會嘗試: fputcsv($fp, array_values($headers));

為了正確解釋Excel,請將分隔符更改為; fputcsv($fp, array_values($headers), ';');

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

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

正如Alex已經指出的那樣,將頭文件寫入csv文件的正確方法是:

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

現在,關於文件在Excel中的顯示方式,您可以使用此處說明的文本導入向導導入文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM