簡體   English   中英

如何解決此錯誤:foreach() 參數必須是數組|對象類型,php 中給出的資源?

[英]how do i resolve this Error : foreach() argument must be of type array|object, resource given in php?

I have been generating excel of database earlier I was using Mysqli database and php for the same and it was working properly but ever since I started using sql server for the same sqlsrv_num_rows() was not returning any row earlier for that i came up with solution那就是我在 $student 之后使用了 array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET

$query_run = sqlsrv_query($conn, $student, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));

比 excel 正在生成,但是在打開可下載的 excel 時,我收到了以下書面錯誤消息

您的 excel 文件格式或文件擴展名無效。驗證文件沒有損壞並且文件擴展名與文件格式匹配

當我檢查我的錯誤日志時,我收到了下面的錯誤消息

foreach() 參數必須是數組|對象類型,資源在 C:\xampp\htdocs\ExcelConversionUsingSql\code.php 中給出,第 56 行

我也在分享我的代碼。請幫我解決這個問題

$student = "SELECT * FROM PERSONS";
$query_run = sqlsrv_query($conn, $student, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));

if(sqlsrv_num_rows($query_run) > 0)
{
    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();

    $sheet->setCellValue('A1', 'LastName');
    $sheet->setCellValue('B1', 'FirstName');
    $sheet->setCellValue('C1', 'Address');
    $sheet->setCellValue('D1', 'City');
    

    $rowCount = 2;
    foreach($query_run as $data)
    {
        $sheet->setCellValue('A'.$rowCount, $data['LastName']);
        $sheet->setCellValue('B'.$rowCount, $data['FirstName']);
        $sheet->setCellValue('C'.$rowCount, $data['Address']);
        $sheet->setCellValue('D'.$rowCount, $data['City']);

        $rowCount++;
    }

    if($file_ext_name == 'xlsx')
    {
        $writer = new Xlsx($spreadsheet);
        $final_filename = $fileName.'.xlsx';
    }
    elseif($file_ext_name == 'xls')
    {
        $writer = new Xls($spreadsheet);
        $final_filename = $fileName.'.xls';
    }
    elseif($file_ext_name == 'csv')
    {
        $writer = new Csv($spreadsheet);
        $final_filename = $fileName.'.csv';
    }

    // $writer->save($final_filename);
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attactment; filename="'.urlencode($final_filename).'"');
    $writer->save('php://output');

}
else
{
    $_SESSION['message'] = "No Record Found";
    header('Location: index.php');
    exit(0);
}
}

?>

sqlsrv_query 只返回 cursor 給語句。 您不能迭代 cursor。 要迭代結果,您可以使用:

//Fetching Data by array
while($row = sqlsrv_fetch_array($query_run, SQLSRV_FETCH_ASSOC)) {
    var_dump($row);
}

或者

//Fetching Data by object
while($row = sqlsrv_fetch_object($query_run)) {
    var_dump($row);
}

暫無
暫無

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

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