我正在使用带有 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 种方法中,它总是与“数组”相呼应。但是,如果我使用 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 来删除斜线,但这不起作用。
我只想得到响应并按原样回应。有谁知道我如何实现这一目标?谢谢!
我通过这样做让它工作,不知道为什么我必须经历这一切才能让它工作,但是是的......
$usersTeamsResult = $getUsersTeams->fetchAll(PDO::FETCH_ASSOC);
$myArray = $usersTeamsResult[0];
$usersTeams = json_decode(array_shift($myArray), true);
然后 $usersTeams 是格式正确的关联数组,然后我可以使用 json_encode 对其进行编码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句