我在本地服务器上用phpMyAdmin创建了一个mySQL数据库。在这个数据库中,我存储了我的朋友的名字和位置(以及id作为数据库的主键)。我编写并运行以下php脚本从数据库中检索这些数据并将它们投影到我的本地Web服务器(XAMPP)上:
<?php
$dbServername = 'localhost';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Friends';
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
header('Content-Type: application/json');
$sql = 'SELECT * FROM friends;';
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo json_encode($row, JSON_PRETTY_PRINT);
}
}
然而,通过这种方式我得到了这个输出:
{
"id": "1",
"name": "David Belton",
"location": "New Haven"
}{
"id": "2",
"name": "Alex Danson",
"location": "New York"
}
整体上不是有效的json输出。 我想得到以下输出:
[{
"id": "1",
"name": "David Belton",
"location": "New Haven"
}, {
"id": "2",
"name": "Alex Danson",
"location": "New York"
}]
(这也是一个有效的json输出)
我该怎么做?
答案 0 :(得分:1)
这种情况正在发生,因为你在循环中将每个对象与其他对象隔离开来。
while ($row = mysqli_fetch_assoc($result))
echo json_encode($row, JSON_PRETTY_PRINT); //<-- echo out an isolated JSON object
相反,只需将所有内容存储在一个数组中,直到完成后再回显JSON一次,而不是迭代。
$arr = [];
while ($row = mysqli_fetch_assoc($result)) $arr[] = $row;
json_encode($arr, JSON_PRETTY_PRINT);
答案 1 :(得分:1)
创建一个数组并在while循环中推送这些记录。最后echo json_encode();
所以输出将采用正确的JSON格式
$records = array();
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$records[] = $row;
}
}
echo json_encode($records, JSON_PRETTY_PRINT);
答案 2 :(得分:1)
将结果存储在数组中,然后回显编码/格式化数组:
<?php
$dbServername = 'localhost';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Friends';
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
header('Content-Type: application/json');
$sql = 'SELECT * FROM friends;';
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
$arr = array();
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
array_push($arr, $row);
}
}
echo json_encode($arr, JSON_PRETTY_PRINT);
答案 3 :(得分:1)
或者,不要逐个获取结果,只需使用mysqli_fetch_all
if ($resultCheck > 0)
{
$row = mysqli_fetch_all($result);
echo json_encode($row, JSON_PRETTY_PRINT);
}
实际上更快并且使用更少的内存:http://php.net/manual/en/mysqli-result.fetch-all.php