![](/img/trans.png)
[英]Laravel api foreach argument must be of type array|object, null given in
[英]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.