我使用PHP创建一个Web服务(API)我试图通过JSON和xml使用数组显示我的数据库表的所有记录,但它只显示一条记录,或者它只响应一条记录。 任何想法都会有用。
由于
$query = "SELECT * FROM students";
$result = mysqli_query($con, $query);
while($rows = mysqli_fetch_array($result))
{
$fullrecord = $rows['ID'] . " " . $rows['StudentName'] . " " . $rows['Age'];
$response['data'] = $fullrecord;
}
//Return Response to browser
deliver_response($_GET['format'], $response);
答案 0 :(得分:0)
对于XML,请参阅此question 对于JSON,使用关联数组:
$json = json_encode($assoc_array);
答案 1 :(得分:0)
我认为您遇到的问题不是编码/解码数组,而是实际创建数组的方式。在while循环中,您正在创建$response
并将其设置为当前行。最终,这只会为您提供查询处理的最后一行(如果您知道只返回一行,那就没问题)。为避免这种情况,请声明一个空数组:$response = array();
。通过正确地使$response['data']
正确地进行多次调整,确保$response['data'][]
不会被多次覆盖:<?php
$query = "SELECT * FROM students";
$result = mysqli_query($con, $query);
$response = array();
while($rows = mysqli_fetch_array($result)) {
$fullrecord = $rows['ID'] . " " . $rows['StudentName'] . " " . $rows['Age'];
$response['data'][] = $fullrecord;
}
$response = json_encode($response);
deliver_response($_GET['format'], $response);
?>
。这可确保每行附加到数组,并且不会覆盖已存储的值。请尝试以下JSON功能:
$table
根据您的评论更新:
以下代码将模拟您的查询。它将使用$response
这只是一个简单的数组。其中的每个项目都将模拟db表中的行。它将遍历数组中的每个项目并将其推送到名为<?php
// this simulates your db table
$table = array('row 1', 'row 2', 'row 3', 'row 4');
$response = array();
// this simulates your `while` loop
foreach ($table as $row) {
// push your value into the associative array
$response['data'][] = $row;
}
// print_r will yield the following:
// Array ( [data] => Array ( [0] => row 1 [1] => row 2
// [2] => row 3 [3] => row 4 ) )
$json_response = json_encode($response);
// another print_r will yield the following:
// {"data":["row 1","row 2","row 3","row 4"]}
return $json_response;
?>
的新关联数组中。这与您的问题直接相关,请注意这里。一旦循环完成(所有行都被推入$ response),我们对其进行编码并返回它:
[data]
现在我们有了JSON数据,我们可以使用类似于下面的内容在另一边阅读它。首先我们将对其进行解码,获取数组<?php
$response = json_decode($json_response);
// pull the data:
$data = $response->{'data'};
foreach ($data as $d) {
echo $d . '<br />';
}
?>
,然后我们将遍历它以在屏幕上打印结果:
{{1}}