提问者:小点点

如何在php api中获得如下所示的json


我有一个表有3列id,名称,年龄和我有4个记录创建。 我试图创建一个one GET API,这样我就可以检索所有这些数据,并作为对象模型的数组返回

{
"status":"Success",
"data": [
         { "id":1, "name":"john", "age":34},
         { "id":2, "name":"doe", "age":32},
         { "id":3, "name":"mark", "age":24}
       ]
}

但是当我使用下面的代码时,数据正在得到null

<?php
 header("Access-Control-Allow-Origin: *");
$servername = "localhost";
$database = "db";
$username = "root";
$password = "root";
//// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);
// Check connection
if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
}


$query = "SELECT * FROM `user` WHERE career = 'software'";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
   // valid email
   $Subject=mysqli_query($con,$Query);
   $i=-1;

    while($row = mysqli_fetch_array($Subject))
    {
        $i++;
    $SubjectCode[$i]['id']=$row['id'];
    $SubjectCode[$i]['name']=$row['name'];
    $SubjectCode[$i]['age']=$row['age'];

    }
    echo '{
    "data":'.json_encode($SubjectCode).',
    "status":"success"
}';
    //echo json_encode($response);

}else{
    $response = array("status"=>"fail", "message"=>"No software engineer available");
    echo json_encode($response);
}

?>

我是PHP新手,有没有人可以帮助我纠正我的代码,这样我就可以得到我想要的PHP API


共2个答案

匿名用户

您将连接定义为$conn并在查询中使用它,然后在另一个查询中使用不存在的$con,并使用结果$subject,该结果是false,因为查询失败。 在查询中选择您想要的列并使用适当的变量,这样就容易多了:

$conn = mysqli_connect($servername, $username, $password, $database);
if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT `id`, `name`, `age` FROM `user` WHERE career = 'software'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
    while($row[] = mysqli_fetch_assoc($result));
    $response = array("data" => $row, "status" => "success");
} else {
    $response = array("status" => "fail", "message" => "No software engineer available");
}
echo json_encode($response);

注意,您需要使用mysqli_fetch_assocmysqli_assoc

您将看到通知:Undefined variable:con with:

error_reporting(E_ALL);
ini_set('display_errors', '1');

匿名用户

else部分的逻辑看起来不错。 但是只管理一次变量可能会更顺利一些。

<?php
// ... stuff

$output = []; // will be json_encoded at the end to a string

$query = "SELECT * FROM `user` WHERE career = 'software'";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
   // valid email
   $Subject=mysqli_query($con,$Query);

    $output['status'] = "success";
    $output['data'] = [];

    while($row = mysqli_fetch_array($Subject))
    {
        $output['data'][] = $row;
    }

}else{
    $output['status'] = "fail";
    $output['message'] = "No software engineer available";
}
echo json_encode($output);
?>