当返回的查询不为空时,来自 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)
我有一个存储过程,它在 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)