0

- 在 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) 解决了这个问题。

4

0 回答 0