- 在IIS 8.5(Windows Server 2012 R2)上运行PHP 5.6
- 通过PDO,ODBC远程连接到SQL Server 2008 R2
- 孤立于一个查询的问题,其他查询正常运行,具有预期结果。
我正在调用一个返回8个结果集的存储过程。我将每个结果集写入CSV。当我到达第三个结果集时,php-cgi.exe崩溃,我得到500错误。
我已将此问题隔离到此特定结果集,因为如果我使用$ stmt-> nextRowset()完全跳过结果集,则一切都按预期工作。
//execute sp, bind parameters year and period-defined above
$StmtText = "{CALL PROCESS_PR (?, ?) }";
$Stmt = $dbh->prepare($QueryText);
$Stmt->bindParam(1, $PayYear, PDO::PARAM_INT);
$Stmt->bindParam(2, $PayPeriod, PDO::PARAM_INT);
$Stmt->execute();
$file_out = fopen('c:\windows\temp\tmp_1.csv, 'w');
$Result = $Stmt->fetchAll(PDO::FETCH_NUM);
foreach($Result as $row) { fputcsv($file_out,$row); }
fclose($file_out);
$Stmt->nextRowset();
//this happens 8 times, fails on the third
我没有抛出任何PHP错误,而高级IIS日志记录并没有提出很多建议。我正在努力确定什么是崩溃的PHP。我通过SSMS直接执行存储过程并且执行成功,查看有问题的结果集,看不到任何异常 - 没有特殊字符,没有长字符串等。
我也一直在确认正确设置PHP内存限制,检查FastCGI和php.ini上的超时,并验证MVC ++ 2012已安装,32位和64位。
寻找有关如何在这个特定结果集上追踪php崩溃的任何想法。非常感谢。
更新:笑下来Vergil的回答解决了这个问题。有问题的结果集有两个数据类型为varchar(max)的字段。将其中一个更改为varchar(255)解决了这个问题。