【发布时间】:2018-03-14 15:00:51
【问题描述】:
我在本地服务器中使用 phpMyAdmin 创建了一个 mySQL 数据库。在这个数据库中,我存储了我朋友的名字和最喜欢的 NBA 球队。这显然是一个多对多的关系。出于这个原因,我创建了三个表:一个包含我朋友的 id 和名称,一个包含团队的 id 和名称,另一个包含 friends_id 和 teams_id(这是关系表)。下面的 MySQL 脚本更清楚地表明了这一点:
CREATE TABLE `friends` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `teams` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `relations` (
`friends_id` int(4) NOT NULL AUTO_INCREMENT,
`teams_id` int(4) NOT NULL AUTO_INCREMENT,
)
我想用这些数据给出一个 json 输出,因此我运行以下 PHP 脚本:
<?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 = [];
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$arr[] = $row;
}
}
echo json_encode($arr, JSON_PRETTY_PRINT);
$sql = 'SELECT * FROM teams;';
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
$arr = [];
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$arr[] = $row;
}
}
echo json_encode($arr, JSON_PRETTY_PRINT);
$sql = 'SELECT * FROM relations;';
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
$arr = [];
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$arr[] = $row;
}
}
echo json_encode($arr, JSON_PRETTY_PRINT);
?>
然而,这并没有给出一个有效的 json 输出,而是三个不同的 json 数组。例如,像这样:
[...,
{
"id": "3",
"name": "David Belton",
},
...]
[...,
{
"id": "4",
"name": "Boston Celtics",
},
...]
[...,
{
"friends_id": "3",
"teams_id": "4"
},
...]
如何打印所有具有有效 json 输出的表?
【问题讨论】: