通过JSON数组/对象返回MYSQL查询结果?

时间:2016-09-27 12:31:56

标签: php mysql json

我有一张包含国家/地区列表的表格,我使用

从表格中选择所有国家/地区
$query = $conn->query("SELECT * FROM countries");

我现在需要将此结果转换为JSON数组/对象,以便在我的Android应用程序中使用,但是我只能从表中返回最后一个国家。

我如何将整个结果/国家/地区列表转换为JSON以用于我的应用程序?

$response = array();

    while($row = mysqli_fetch_assoc($query))
    {

        $response["country"] = $row;

    }



echo json_encode ( $response );

4 个答案:

答案 0 :(得分:2)

您可以使用mysqli_fetch_all之类的

$response = array();
$response['country'] = mysqli_fetch_all($query, MYSQLI_ASSOC);
echo json_encode($response);

答案 1 :(得分:1)

如果您或未来的读者仍然不确定为什么您正在做的事情无效,那么当您在while循环中使用以下代码时:

$response["country"] = $row;

在循环的第一次迭代中,创建$response数组,使用一个键("country"),并将$row的值分配给该键。在每次后续迭代中,"country"密钥被覆盖,其新值为$row。这就是为什么你最后只有最后一个国家。

将其更改为

$response["country"][] = $row;

正如几个人所建议的那样,您为"country"键分配了一个数组,并将$row的值附加到其中,并在每次后续迭代中添加$row的新值附加到该数组,因此在循环结束时,您将拥有所有国家/地区。

fetchAll()方法是一种快捷方式,可以排除在循环中获取行的需要。它确实附带了一些你可以在the documentation中阅读过的警告,但如果你的结果集不是太大而你只是去json_encode并直接输出它,就像你在这里做的那样,这是一个合乎逻辑的选择。

答案 2 :(得分:0)

.idea

答案 3 :(得分:0)

如果您可以使用$response["country"] = $row;所有$row数据,则每个循环都会在$response变量中初始化。因此,如果您返回$response数组,则可以获得最后的数据。

所以,请遵循以下代码

$response = array();
while($row = mysqli_fetch_assoc($query))
{
   $response["country"][] = $row;
}
echo json_encode ( $response );

如果您认为不使用while循环,那么您也可以使用代码

$response = array();
$response['country'] = mysqli_fetch_all($query, MYSQLI_ASSOC);
echo json_encode($response);