当返回的查询不为空时,来自 php 的 MS SQL 服务器过程失败并显示 500

MS SQL Server procedure from php fails with 500 when returning query is not empty

我有一个存储过程,它在 Management Studio 中运行正常。

然后我有一个php代码,我称之为:

$sql = "EXEC MyProc @Param1=1, @Param2 = 2, @Param3 = '3'";
$stmt = sqlsrv_query($conn, $sql);

if ($stmt === false) {
    die(print_r(sqlsrv_errors(), true));
}

while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
{
    // and so on ...
}

它运行正常,有一些参数,return 0 条记录(我只是得到一个空数组)。

但是当我将参数更改为 return 值时,我在调用 PHP 脚本的 JavaScript 中出现 500 错误。

在 JS 中是这样调用的:

dojo.xhrPost({
    url: "/mySuperPhpCode.php",
    handleAs: "text",
    content: { Param1: 1, Param2: 2, Param3: 3 },
    load: function (response, ioArgs) {
        // some actions
    },
    error: function(response, ioArgs) {
        // some actions                            
    }
});

我知道,500 错误可能会导致很多问题,但我暂时没有想法。

我的配置:IIS 7.5,PHP 5.3.19。询问是否需要任何其他详细信息。

更新 1: 处理结果的代码(while循环内):

$rez = array();
foreach ($row as $key => $value) {
    if (($key=="SomeDateFieldName1"||$key=="SomeDateFieldName2"||
         $key=="SomeDateFieldName3"||$key=="SomeDateFieldName4"||
         $key=="SomeDateFieldName5") && !is_null($value) ){
        $d=get_object_vars($value);
        $d=$d["date"];
        $zn=$d;
    } else {
        $zn=$value;
    }           

    $rez[$key] = $zn;           
}

$t[]=$rez ;

$t - 将从 php-脚本 returned。

再补充一点:这个php-文件包含很少的过程调用(传入参数决定调用哪个)。其中一些工作完美(在这两种情况下:没有结果和有一些记录 returned)并且使用此代码处理没有问题。

找到了! eemikula,你是对的。问题出在结果处理部分。我试图在非对象值上调用 get_object_vars(在之前的所有情况下,在给定 "SomeDateFieldNameN" 的 table 中是 DateTime 对象, 但在这个 table 中它是一个 varchar), 所以我为它添加了一个检查:

is_object($value)