fputcsv适用于MySQL,不适用于SQL Server(导出CSV)

时间:2016-04-02 14:51:25

标签: php arrays sql-server fputcsv

我在MySQL和Microsoft SQL Server中有相同的表:

  • ID = 1
  • Column1 = Hello world
  • Column2 =你今天好吗

我可以使用PHP fputcsv 功能在Web浏览器中显示来自MySQL的数据。为了解决我面临的问题的原因,我已经注释掉了标题,强制fputcsv函数在Web浏览器中显示数据而不是CSV文件。以下PHP将在Web浏览器中生成以下输出:

<?php
//header("Content-Type: text/csv;charset=utf-8");

$con = new mysqli('domain','username','password','database');
$select = "select * from tablename";
$select_query = mysqli_query($con, $select);
$fp= fopen('php://output', 'w');

while ($row = mysqli_fetch_array($select_query,MYSQL_ASSOC)) {
fputcsv($fp, array_values($row));
}

fclose($fp);
?>

enter image description here

当使用类似的PHP使用fputcsv函数在Microsoft SQL Server表中显示数据时,Web浏览器会显示500错误,例如页面无法显示

<?php
//header("Content-Type: text/csv;charset=utf-8");

$ServerName = "domain";
$ConnectionString = array("Database"=>"Database", "UID"=>"username", "PWD"=>"password");
$con = sqlsrv_connect($ServerName, $ConnectionString);
$select = "select * from tablename";
$select_query = sqlsrv_query($con, $select);
$fp= fopen('php://output', 'w');

while ($row = sqlsrv_fetch_array($select_query, SQLSRV_FETCH_ASSOC)) {
fputcsv($fp, array_values($row));
}

fclose($fp);
?>

在while循环中,如果我将 fputcsv($ fp,array_values($ row)); 替换为 echo $ row ['column1']; ,则为500错误不再出现,并显示 Hello world 。这告诉我while循环能够获取数组,并且使用SQL Server时这行代码存在一些问题:

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

我注意到this post on StackOverflow使用 array_keys foreach 循环而不是 array_values 。当我使用 array_keys foreach 循环时,将显示SQL Server表列。

while ($row = sqlsrv_fetch_array($select_query, SQLSRV_FETCH_ASSOC)) {
  fputcsv($fp, array_values($row));
    foreach ($row as $data) {
       fputcsv($fp, $data);
    }
}

enter image description here

我注意到this post on StackOverflow的第一个答案也使用 array_keys 而不是 array_values 。这使我确保array_key应该与SQL Server一起使用。

在使用 array_keys 和SQL Server时,我不确定为什么Web浏览器会显示列名而不是数据。如果有任何提示,建议或想法可能会引导我进入下一步的故障排除步骤,我一定会感激不尽。

0 个答案:

没有答案