Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数据导出到excel时类DateTime的对象出错_Php_Excel_Export To Csv_Sqlsrv_Sql Server 2012 Express - Fatal编程技术网

Php 将数据导出到excel时类DateTime的对象出错

Php 将数据导出到excel时类DateTime的对象出错,php,excel,export-to-csv,sqlsrv,sql-server-2012-express,Php,Excel,Export To Csv,Sqlsrv,Sql Server 2012 Express,我有一个包含许多列的表。有些列包含数值,有些列包含文本,有些列包含日期 当我尝试将数据导出到Excel时,数字和值可以导出,但是当我想要导出日期数据时,它显示了这个错误“类DateTime的对象无法转换为字符串” 我的导出函数的工作方式是,用户可以选择要通过PHP从SQL导出到excel的列。我的列存储在数组中。下面是我的代码: //Get list of selected column from selected checkboxes $colarray = $_GET['col

我有一个包含许多列的表。有些列包含数值,有些列包含文本,有些列包含日期

当我尝试将数据导出到Excel时,数字和值可以导出,但是当我想要导出日期数据时,它显示了这个错误“类DateTime的对象无法转换为字符串”

我的导出函数的工作方式是,用户可以选择要通过PHP从SQL导出到excel的列。我的列存储在数组中。下面是我的代码:

   //Get list of selected column from selected checkboxes
    $colarray = $_GET['colarray'];

    //convert string to array 
    $string1 = ['[',']'];
    $string2 = ["",""];
    $newcolarray = str_replace($string1, $string2, $colarray);
    $newarray = explode(",",$newcolarray);

    $filename = "File name " . date('d-M-y') . ".csv"; // Create file name

    $f = fopen('php://memory', 'w');

//Insert column name in first row of excel
    fputcsv($f, $newarray);

    //dynamic Select query statement
    $query = "SELECT "; 
    $query .= $colarray;
    $query .= " FROM OVERALL_SUMMARY_ORIGINAL"; // Get data from Database from OVERALL_SUMMARY_ORIGINAL table
    $stmt = sqlsrv_query($conn, $query);

    while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){

/**how can i place this code $row['Date']->format('d M Y') here***/ 
        fputcsv($f, $row);

    }

    //move back to beginning of file
    fseek($f, 0);

    //set headers to download file rather than displayed
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '";');

    //output all remaining data on a file pointer
    fpassthru($f);

由于我的列存储在数组中以导出为csv,有谁能帮助我将日期数据转换为字符串吗?

使用PHP Driver for SQL Server,您可以使用连接字符串或语句级别的
'ReturnDateSasString'
选项将日期和时间对象作为字符串或日期时间对象

<?php

    ...
    $query = "SELECT "; 
    $query .= $colarray;
    $query .= " FROM OVERALL_SUMMARY_ORIGINAL"; // Get data from Database from OVERALL_SUMMARY_ORIGINAL table
    $options = array('ReturnDatesAsStrings' => true);
    $stmt = sqlsrv_query($conn, $query, array(), $options);
    if ($stmt === false) {
        echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
        exit;
    }
    while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
        fputcsv($f, $row);
    }   
    ...

?>  
如果我正确理解您的情况,那么SQL语句中的列是动态的。在这种情况下,您可以尝试在语句级别使用此功能

<?php

    ...
    $query = "SELECT "; 
    $query .= $colarray;
    $query .= " FROM OVERALL_SUMMARY_ORIGINAL"; // Get data from Database from OVERALL_SUMMARY_ORIGINAL table
    $options = array('ReturnDatesAsStrings' => true);
    $stmt = sqlsrv_query($conn, $query, array(), $options);
    if ($stmt === false) {
        echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
        exit;
    }
    while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
        fputcsv($f, $row);
    }   
    ...

?>  

在你有评论的地方,只需把
$row['Date']=$row['Date']->格式('dmy')
@Nick这肯定行不通,我必须声明一个变量$date=$row['date']->format('dmy'),但是由于我正在将数组插入csv中,数组依赖于所选列,所以我应该将$date放置在何处。我要说的是替换
$row['date']中的
DateTime
对象
带有该日期的字符串表示形式。我不明白为什么这样不行?尼克,我非常抱歉。我误解了你的第一句话。现在可以了。很抱歉,没问题。我很高兴你让它工作了。