我有一个存储过程,它在管理工作室中运行正常。
然后我有一个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)