- 在 IIS 8.5 (Windows Server 2012 R2) 上运行 PHP 5.6
- 通过 PDO、ODBC 远程连接到 SQL Server 2008 R2
- 与一个查询隔离的问题,其他查询正常运行并获得预期结果。
我正在调用一个返回八个结果集的存储过程。我将每个结果集写入 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 崩溃的任何想法。非常感谢。
更新: Laughing Vergil 下面的回答解决了这个问题。有问题的结果集有两个数据类型为 varchar(max) 的字段。将其中一个更改为 varchar(255) 解决了这个问题。