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


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

我有一个存储过程,它在管理工作室中运行正常。

然后我有一个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 ...
}

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

但是当我更改参数以返回值时,我在 JavaScript 中收到 500 错误,这是调用 PHP 脚本。

以下是它在 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-script 返回。

还有一个补充:这个php文件包含很少的对过程的调用(传入参数决定,将调用哪一个)。其中一些工作正常(在两种情况下:没有结果和返回一些记录时),并且使用此代码处理没有问题。

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

is_object($value)