我正在尝试为上个月的数据库中的实例运行报告。这会将结果保存为.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错误通常会在网络服务器的错误日志中生成条目 –