如何从使用FOR JSON PATH的SQL查询中获取格式正确的JSON数组?

时间:2018-12-28 14:24:16

标签: php json tsql pdo

我正在使用带有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   "}]}]}"

我没有包括整个答复,但这是最基本的。 我已经尝试过用反斜杠删除斜杠,但这是行不通的。

我只想获取响应并按原样回显。有谁知道我怎么能做到这一点?谢谢!

1 个答案:

答案 0 :(得分:0)

我通过这样做使它起作用,不知道为什么我必须经历所有这些才能使其起作用,但是是的...

i =1
if i:
    print True
else:
    print False

然后$ usersTeams是格式正确的关联数组,然后可以使用json_encode进行编码。