2014-02-10 68 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