2016-09-27 140 views
0

我有一个包含国家名单表,我使用通过JSON数组/对象返回MYSQL查询结果?

$query = $conn->query("SELECT * FROM countries"); 

选择所有从表中的国家我现在需要把这个结果转换为JSON阵列/对象用在我的Android应用程序,但我只能让它从表格中返回最后一个国家。

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

$response = array(); 

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

     $response["country"] = $row; 

    } 



echo json_encode ($response); 
+1

'$回应[ “国”] = $行;'应该是'$ response [“country”] [] = $ row;' – Noman

+2

好神。人们何时会_finally_开始阅读文档? http://php.net/manual/en/mysqli-result.fetch-all.php – arkascha

回答

1

如果您或未来的读者仍然不知道为什么在做没有工作,什么,当你使用以下代码在你while循环:

$response["country"] = $row; 

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

当你将它更改为

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

一对夫妇的人建议,你将数组分配到"country"键和$row值追加到它,以后每次迭代中,新价值$row附加到该数组,所以在循环结束时,你将拥有所有的国家。

fetchAll()方法是一种快捷方式,它不需要在循环中获取行。它的确有一些注意事项,你可以在the documentation中看到,但是如果你的结果集不是太大,你只需要json_encode并直接输出,这是一个合理的选择。

0
$response = array(); 

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

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

} 



echo json_encode ($response); 
+0

工作,但效率低下。 – arkascha

+1

请编辑更多信息。仅限代码和“尝试这个”的答案是不鼓励的,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试这个”。 – abarisone

2

你可以使用mysqli_fetch_all

$response = array(); 
$response['country'] = mysqli_fetch_all($query, MYSQLI_ASSOC); 
echo json_encode($response); 
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);