代码之家  ›  专栏  ›  技术社区  ›  Sandip Armal Patil

Php Webservices:从MySQL获取多条记录,并将其编码为JSON数组

  •  0
  • Sandip Armal Patil  · 技术社区  · 6 年前

    我是使用MySQL的PHP网络服务的新手。我跟着 this 辅导的。我创建了一个表-> loan_applications 使用phpmyadmin。目前,我在与id 1相关的表中有3条记录。我想检索所有3个记录,并想编码它在json。

    我尝试了多种方法,并尝试了google搜索,但无法获得正确的json数组作为响应。这是我的 get_applications_list.php

    <?php
    
    require_once 'include/DB_Functions.php';
    $db = new DB_Functions();
    
    // json response array
    $response = array();
    
    if (isset($_GET['id'])) {
    
        // receiving the post params
        $id = $_GET['id'];
    
        $applications = $db -> getApplicationsList($id);
        if ($applications) {
            // got applications successfully
            $response["status"] = 0;
            $response["id"] = $applications["id"];
            $response["application_id"] = $applications["application_id"];
            $response["requested_amount"] = $applications["requested_amount"];
            $response["interest_per_day"] = $applications["interest_per_day"];  
            $response["gst"] = $applications["gst"];    
            $response["tenure"] = $applications["tenure"];  
            $response["processing_fees"] = $applications["processing_fees"];    
            $response["amount_user_get"] = $applications["amount_user_get"];
            $response["amount_user_pay"] = $applications["amount_user_pay"];
            $response["application_latitude"] = $applications["application_latitude"];
            $response["application_longitude"] = $applications["application_longitude"];
            $response["application_status"] = $applications["application_status"];      
            $response["created_at"] = $applications["created_at"];  
            $response["updated_at"] = $applications["updated_at"];          
            $response["message"] = "Applications details fetched successfully";
    
            echo json_encode($response);
        } else {
            // applications failed to store
            $response["status"] = 1;
            $response["message"] = "Unknown error occurred in getting details!";
            echo json_encode($response);
        }       
    } else {
        // receiving the post params
        $response["status"] = 2;
        $response["message"] = "Required parameters is missing!";
        echo json_encode($response);
    }
    ?>  
    

    这是我的 DB_Functions.php

    <?php
    
    class DB_Functions {
    
    private $conn;
    
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // connecting to database
        $db = new Db_Connect();
        $this->conn = $db->connect();
    }
    
    // destructor
    function __destruct() {
    
    }     
    public function getApplicationsList($id){
        $stmt = $this->conn->prepare("SELECT * FROM loan_applications WHERE id = ?");
        $stmt->bind_param("s", $id);
        $stmt->execute();
        $applications = $stmt->get_result()->fetch_assoc();
        $stmt->close();
    
        if($applications){
            return $applications;
        }else {
            return false;
        }
    }
    }
    ?>   
    

    以下是我得到的回应:

    {"status":0,"id":1,"application_id":1,"requested_amount":5000,"interest_per_day":"0.50","gst":18,"tenure":28,"processing_fees":"5.00","amount_user_get":4705,"amount_user_pay":5700,"application_latitude":"9.999999999","application_longitude":"9.999999999","application_status":1,"created_at":"2018-10-10 21:45:17","updated_at":"0000-00-00 00:00:00","message":"Applications details fetched successfully"}  
    

    我只得到一个记录,但我需要所有与id 1相关的3个记录。我试了很多次,但没能成功。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Umair Abid    6 年前

    所以这里有很多问题

    1-虽然不确定,但是 Currenlty I have 3 records in table related to id 1 似乎是不正确的说法。如果 id 是主键,不能对一个记录有3个记录 身份证件

    二- $stmt->get_result()->fetch_assoc(); 将始终返回一行,若要获取多行或行集合,则需要按如下方式执行

    if ($result = $mysqli->query($query)) {
    
        /* fetch associative array */
        while ($row = $result->fetch_assoc()) {
            printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
        }
    
        /* free result set */
        $result->free();
    }
    

    3-从下面的代码可以很清楚地看出,实际上您只返回了一行

    if ($applications) {
            // got applications successfully
            $response["status"] = 0;
            $response["id"] = $applications["id"];
            $response["application_id"] = $applications["application_id"];
            $response["requested_amount"] = $applications["requested_amount"];
            $response["interest_per_day"] = $applications["interest_per_day"];  
            $response["gst"] = $applications["gst"];    
            $response["tenure"] = $applications["tenure"];  
            $response["processing_fees"] = $applications["processing_fees"];    
            $response["amount_user_get"] = $applications["amount_user_get"];
            $response["amount_user_pay"] = $applications["amount_user_pay"];
            $response["application_latitude"] = $applications["application_latitude"];
            $response["application_longitude"] = $applications["application_longitude"];
            $response["application_status"] = $applications["application_status"];      
            $response["created_at"] = $applications["created_at"];  
            $response["updated_at"] = $applications["updated_at"];          
            $response["message"] = "Applications details fetched successfully";
    
            echo json_encode($response);
        }
    

    你应该这样做

    $applications = getAllApplications(); //returns array of applications
    $response['applications'] = $applications; // if they keys you want to send and database fields are same you don't need to set them separately
    return json_encode($response);