【发布时间】:2018-02-27 00:28:12
【问题描述】:
我正在尝试设置一个 PHP 回调函数以在我们的应用程序中使用。它需要从 SQL 服务器中提取数据,虽然我一开始可以让它工作,但它并没有达到我想要的效果。
代码:
//Callback function for passing queries
function queryCallback($conn, $query) {
$response = sqlsrv_query($conn, $query);
while ($row = sqlsrv_fetch_array($response)){
if ($row === false) {
die(print_r(sqlsrv_errors(), true));
}
$responseData[] = $row;
}
foreach($responseData as $v) {
$output[key($v)] = current($v);
}
$responseDataJSON = JSON_encode($output, 128);
return $responseDataJSON;
}
在上面,$conn 代表我们的服务器凭据,传递给 sqlsrv_connect(),$query 是包含传递给 SQL 的查询的字符串。两者都已被验证为正常工作。
问题:
此代码正确联系服务器,并运行查询,但它只返回一个结果。这显然是循环设置的问题,但我无法发现它
【问题讨论】:
-
“一个结果”总是最后一行吗?
$output[key($v)] = current($v);在我看来根本不对,你能解释一下这个结构以及你为什么要执行这个操作吗?如果您只是执行JSON_encode($responseData,128);并跳过了那个额外的循环会发生什么? -
您的代码向我显示“对于每一行,获取唯一的第一列并将其设置为
$output['firstcolumnname']覆盖现有的设置值。 -
这是为了解决我遇到的 JSON_encode() 从 SQL 返回每个返回值的重复项时遇到的问题。没有它,我得到的对象看起来像这样: (3303) [{...}, {...},...] [0 ... 99] 0:{0: "Person's name here", "": "Person's name here again “}。此外,返回的结果始终是表中的第一个
-
问题不在于
json_encode(),而在于您提供给它的数据。关注$output[key($v)],这段代码没有做你认为它在做的事情。 -
我同意这一点,我需要再看看我的查询
标签: php sql json foreach callback