代码之家  ›  专栏  ›  技术社区  ›  Mona Coder

php mysqli只是在json中返回一行

  •  1
  • Mona Coder  · 技术社区  · 5 年前

    你能看看这个演示并告诉我为什么我的JSON输出只有一行吗?

        $items = [];
        if ($stmt = $this->conn->prepare("SELECT * FROM $tbl")) {
            $stmt->execute();
            $result = $stmt->get_result();
            if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                 $items = $row;
             }
            $stmt->free_result();
            $stmt->close();
            }
            $this->conn->close();
        }
        echo json_encode($items);
    
    4 回复  |  直到 5 年前
        1
  •  4
  •   Marcin    5 年前

    这是因为您要遍历行并将它们中的每一行分配给 $items :

    while ($row = $result->fetch_assoc()) {
        $items = $row;
    }
    

    因此,在循环结束后,您将得到一个变量,该变量是在循环的最后一次迭代期间分配的$row。

    您需要将值推送到数组中,如下所示:

    $items[] = $row;
    
        2
  •  1
  •   mub    5 年前

    $items[] = $row; 会解决问题。

        3
  •  1
  •   JJJ Sergey    5 年前

    尝试使用数组“push”函数:

    $items = array();
    if ($stmt = $this->conn->prepare("SELECT * FROM $tbl")) {
        $stmt->execute();
        $result = $stmt->get_result();
        if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
             array_push($items, $row);
         }
        $stmt->free_result();
        $stmt->close();
        }
        $this->conn->close();
    }
    echo json_encode($items);
    

    根据 Paolo Bergantino -在PHP中使用什么更好 $array[] = $value array_push($array, $value) ? 他说:

    如果使用数组push()向数组中添加一个元素,则最好 使用$array[]=因为这样就没有调用 功能。

        4
  •  0
  •   Sajad Mirzaei    5 年前

    要解决您的问题,您必须更改代码的这一部分:

    while ($row = $result->fetch_assoc()) {
        $items = $row;
    }
    

    到:

    while ($row = $result->fetch_assoc()) {
        $items[] = $row;
    }
    

    但是,如果您使用PDO,我认为最好更改这部分代码:

    $items = [];
    if ($stmt = $this->conn->prepare("SELECT * FROM $tbl")) {
        $stmt->execute();
        $result = $stmt->get_result();
        if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
             $items = $row;
         }
        $stmt->free_result();
        $stmt->close();
        }
        $this->conn->close();
    }
    

    到:

    if ($stmt = $this->conn->prepare("SELECT * FROM $tbl")) {
        $stmt->execute();
        $items = $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    

    移除while循环。