我正在嘗試爲上個月的數據庫中的實例運行報告。這會將結果保存爲.CSV文件。 我遇到的問題是,使用這個腳本我得到一個內部服務器錯誤500.
如果我在查詢中使用WHERE子句來過濾數據,我沒有得到這個問題,所以我知道查詢和函數創建.CSV文件正在一定程度上起作用。我得到一個完整的.CSV文件。但是,如果沒有額外的WHERE子句,文件似乎會填充到大部分數據的位置,但似乎會重新啓動,生成的文件只包含大約1/8的整體數據。
我期待在每月的.csv 函數CreateFile(){錯誤500內部服務器錯誤PHP腳本寫入CSV
/* *此方法將被用於創建csv文件 */
//-----Connection to DB-----//
$connectionInfo = array("UID" => $this->dbLogin, "PWD" => $this->dbLogin);
$conn = sqlsrv_connect($this->serverName, $connectionInfo)or die(print_r(sqlsrv_errors()));
//-----SQL Query-----//
$getList = sqlsrv_query($conn, $this->queryString, array(), $this->options)or die(print_r(sqlsrv_errors()));
//-----File creation-----//
$fp = fopen("../" . $this->portal . "/" . $this->folder . "/" . $this->fileName . ".csv", 'w+');
// //-----Add in first row that contains the column titles-----//
fputcsv($fp, $this->headerArray);
fclose($fp);
// // // -----Add data to the csv file-----//
$fp = fopen("../" . $this->portal . "/" . $this->folder . "/" . $this->fileName . ".csv", 'a+');
$data = array();
while ($row = sqlsrv_fetch_array($getList, SQLSRV_FETCH_ASSOC)) {
$data['id'] = $row['id'];
$data['fullname'] = $row['fullname'];
$data['profile'] = $row['profile'];
$data['starttime'] = date_format($row['starttime'],'D jS M Y G:i');
$data['endtime'] = date_format($row['endtime'], 'D jS M Y G:i');
$endTime = date_format($row['endtime'], 'U');
$startTime = date_format($row['starttime'], 'U');
if($startTime == null || $startTime == ""){
$startTime = $endTime;
}
$diff = ($endTime - $startTime);
$data['duration'] = round($diff/3600).gmdate(":i:s", $diff);
$data['hour'] =date_format($row['starttime'] ,'G');
$data['ref'] = $row['ref'];
$data['endType'] = $row['endType'];
$data['problem'] = $row['problem'];
$data['solution'] = $row['solution'];
$data['type'] = $row['type'];
fputcsv($fp, array_values($data));
}
fclose($fp);
sqlsrv_close($conn);
}
上述數據的40K +行是在我的類文件中用來創建.csv文件的函數。我正在使用的查詢是。
$this->queryString ="SELECT A.id
,B.firstname + ' ' + B.lastname AS fullname
,B.location
,A.profile
,A.siteid
,A.accountnumber
,A.starttime
,A.endtime
,A.ref
,A.endType
,A.problem
,A.solution
,A.type
FROM trend.report A
LEFT JOIN users.profile B
ON A.empId = B.id
WHERE DATEDIFF(M, A.endtime, GETDATE()) = 0
ORDER BY A.endtime DESC";
如果我添加例如
AND A.profile ='exampleProfile'
我仍然得到20K +行,但我得到一個compeleted .CSV文件。
這件事顯而易見嗎?或者可能是由於執行腳本所需的行數/時間? 謝謝
500錯誤通常會在網絡服務器的錯誤日誌中生成條目 –