【发布时间】:2019-05-26 08:47:34
【问题描述】:
我正在使用带有 FOR JSON PATH 的 sql 查询,它应该会给出 JSON 结果。但是,我不确定如何在 PHP 中返回结果。该命令可以完美地作为 SQL 命令运行,但是在将其作为准备好的语句执行时会遇到一些问题。
这是我的查询...
$getUsersTeams = $this->dbConn->prepare("SELECT T.Id AS Id, T.TeamName AS TeamName, T.TeamImage AS Image, T.Description AS Description, T.IsActive AS IsActive, TU.IsAdmin AS IsAdmin,
( SELECT TU.UserId AS id, U.FirstName, U.LastName, U.DisplayPicture
FROM TeamUsers TU
INNER JOIN Users U ON TU.UserId = U.Id
WHERE TU.TeamId = T.Id
FOR JSON PATH
) AS [Members]
FROM TeamUsers TU
INNER JOIN Teams T ON T.Id = TU.TeamId
WHERE UserId = :userId
FOR JSON PATH, INCLUDE_NULL_VALUES, ROOT('Teams')");
$getUsersTeams->bindParam(':userId', $this->userId);
if(!$getUsersTeams->execute())
{
return false;
}
$usersTeamsResult = $getUsersTeams->fetch(PDO::FETCH_ASSOC);
header("content-type: application/json");
echo $usersTeamsResult;
exit;
我尝试过 fetch、fetchall 和 while 循环来获取数据。
在我尝试过的所有 3 种方法中,它总是回显“Array”。尽管, 如果我用 fetchAll...
echo json_encode($usersTeamsResult);
...那么结果至少会回显,但格式不正确,就像这样...
"JSON_F52E2B61-18A1-11d1-B105-00805F49916B": "{\"Teams\":[{\"Id
\":1,\"TeamName\":\"GroupName1\",\"Image\":null,\"Description\":null,
\"IsActive\":true,\"IsAdmin\":false,\"Members\": .....ETC "}]}]}"
我没有包含整个回复,但这就是它的要点。 我已经尝试使用 stripslashes 来删除斜线,但这不起作用。
我只想得到响应并按原样回应。有谁知道我怎么能做到这一点?谢谢!
【问题讨论】:
-
尝试删除这一行
header("content-type: application/json");并保留这一行$array = son_encode($usersTeamsResult); -
当字符串在 json 中进行双重编码时,这很常见。确保只编码一次
-
我试过 $usersTeamsResult = $getUsersTeams->fetch(PDO::FETCH_ASSOC); echo json_encode($userTeamsResult);出口;但我只是得到空值,也尝试使用 fetchAll...
-
您是否尝试过一次解码 json 以查看您是否再次获得了有效的 json 字符串?不要 json_encode($userTeamsResult),$userTeamsResult 已经编码了
-
是的,我试过了,它给了我 null,返回任何数据的唯一方法是使用 fetchAll、json_encode 和标头 application/json