Как получить только значение последней итерации при получении данных из базы данных, я пробовал Получить значения в формате JSON - PullRequest
0 голосов
/ 25 апреля 2018

Вот что я попробовал.Я попытался получить данные из DB. Он показывает данные от начала итерации до конца итерации. Мне нужно только значение последней итерации. Я полный нуб.Буду признателен за помощь

   <?php
        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "api_db";
        $conn = new mysqli($servername, $username, $password, $dbname);
        $myarray=array();
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        } 
        $sql = "SELECT id, name, description FROM products";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
            while($row = $result->fetch_array(MYSQL_ASSOC)) {
                $myarray[]= $row; 


                // echo "<pre>";
                // print_r($myarray);

                echo "<pre>";echo json_encode($myarray);
                // echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Description :" . $row["description"]. "<br>";
            }
        } else {
            echo "0 results";
        }
        $conn->close();

        ?>

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Наконец, я понял, что вы хотите -

Вам нужно получить все записи в одной переменной. Что вы можете кодировать наконец

Для этого выполните следующие действия: -

1. Инициализировать массив вне цикла

2. Назначьте каждую запись в массив внутри цикла

3. Кодируемый массив вне цикла

Сделайте, как показано ниже: -

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "api_db";
    $conn = new mysqli($servername, $username, $password, $dbname);
    $myarray=array();
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    $sql = "SELECT id, name, description FROM products";
    $result = $conn->query($sql);
    $myarray = []; //Initialize array outside of the loop
    if ($result->num_rows > 0) {
        while($row = $result->fetch_array(MYSQL_ASSOC)) {
            $myarray[] = $row; //Assign each record to the array inside the loop
        }
    } else {
        echo "0 results";
    }
    $conn->close();
    echo json_encode($myarray);//Encode array outside the loop
?>
0 голосов
/ 25 апреля 2018

Для меня это выглядит как дубликат, но я бы предложил следующее, при условии, что вы не собираетесь сортировать набор данных из СУБД.

Использовать mysqli_data_seek ( mysqli_result $result , int $offset ) для перемещения курсора, который пересекает набор данных.Так что для вашего случая это будет

$nor = mysqli_num_rows($result); //Number of rows
mysqli_data_seek($resutl, ($nor - 1)); //Indices are based on 0

В основном $nor содержит общее количество записей.Таким образом, индекс последней записи будет $nor-1.

Конечно , если вы сортируете набор данных в своем запросе, используя ORDER BY, тогда лучший способ сделать этодобавление ORDER BY id DESC LIMIT 1.

0 голосов
/ 25 апреля 2018

Измените ваш SQL-запрос на

SELECT id, name, description FROM products order by id desc limit 1

Это будет работать для вас.

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