PHP MySQLi просто возвращает одну строку в JSON - PullRequest
0 голосов
/ 07 февраля 2019

Я работаю над кодом ниже.Почему в выводе 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 ]

0 голосов
/ 07 февраля 2019

для решения вашей проблемы вы должны изменить эту часть кода:

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

TO:

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();
}

TO:

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

И удалить цикл while.

0 голосов
/ 07 февраля 2019

Это происходит потому, что вы просматриваете строки и присваиваете каждой из них $items:

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

Таким образом, после завершения цикла вы получите переменную $ row, которая былаприсваивается во время последней итерации этого цикла.

Вам необходимо поместить значения в массив следующим образом:

$items[] = $row;
0 голосов
/ 07 февраля 2019

Попробуйте с функцией array_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);

Согласно Паоло Бергантино - Что лучше использовать в PHP $array[] = $value или array_push($array, $value)?Он говорит:

Если вы используете array_push () для добавления одного элемента в массив, лучше использовать $ array [] =, потому что в этом случае нет необходимости вызывать функцию.

0 голосов
/ 07 февраля 2019

$items[] = $row; решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...