Ошибка при выборе PHP с ограничением, смещение от SQL

Я пытаюсь выбрать данные из базы данных. Сценарий php должен выбрать 4 строки из таблицы базы данных, начиная с самой первой строки, но код заканчивает тем, что выбирает только 3 строки, начиная со второй строки вместо первой. Что я должен делать?

<?php 

        try{

            require 'mysqli_connect.php';

            $maxrow = 4;
            $start = 0;

            $query = "SELECT user_id , first_name , last_name, email , registration_date FROM users LIMIT ? , ?";
            $stmt = mysqli_stmt_init($dbcon);
            mysqli_stmt_prepare($stmt , $query);
            mysqli_stmt_bind_param($stmt , 'ii' , $start ,$maxrow); // still showing only three rows and does not count from zero
            mysqli_stmt_execute($stmt);
            $record = mysqli_stmt_get_result($stmt);
            $row = mysqli_fetch_array($record , MYSQLI_NUM);

            if ($record){

                echo "<table>";
                echo "<tr>";
                echo "<th>user_id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";  
                echo "<th>email</th>";
                echo "<th>registration_date</th>";
                echo "</tr>";

                while ($row = mysqli_fetch_array($record , MYSQLI_NUM)) {

                    $user_id = $row[0];
                    $first_name = $row[1]; 
                    $last_name = $row[2];
                    $email = $row[3];
                    $registration_date  = $row[4];

                    echo '<tr>
                    <td><a href = "edit_user.php?id=' . $user_id . '">Edit</a></td>
                    <td><a href = "delete_user.php?id=' . $user_id . '">Delete</a></td>
                    <td>' . $last_name . '</td>
                    <td>' . $first_name . '</td>
                    <td>' . $email . '</td>
                    <td>' . $registration_date . '</td>
                    </tr>';
                }
                echo "</table>";
                mysqli_free_result ($record); // Free up the resources. 

            }

        }catch(Exception $e){
            //echo $e->getMessage();
        }catch(Error $e){
            //echo $e->getMessage();
        }

    ?>

Просто выполните LIMIT 4, не нужно объявлять начальную строку, если она начинается с первой строки.

Jaquarh 15.12.2018 14:03

мне действительно нужен этот $ start, потому что я хочу использовать его для разбивки на страницы, хотя спасибо

Onyia 15.12.2018 14:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
194
2

Ответы 2

Здесь выбирается первая строка $row = mysqli_fetch_array($record , MYSQLI_NUM);. Итак, mysqli_fetch_array() в while начинается со второго ряда.

Ваша первая запись находится здесь: $row = mysqli_fetch_array($record , MYSQLI_NUM);

Должен быть

<?php 

        try{

            require 'mysqli_connect.php';

            $maxrow = 4;
            $start = 0;

            $query = "SELECT user_id , first_name , last_name, email , registration_date FROM users LIMIT ? , ?";
            $stmt = mysqli_stmt_init($dbcon);
            mysqli_stmt_prepare($stmt , $query);
            mysqli_stmt_bind_param($stmt , 'ii' , $start ,$maxrow); // still showing only three rows and does not count from zero
            mysqli_stmt_execute($stmt);
            $record = mysqli_stmt_get_result($stmt);
            // Your first record is fetch here! OMG!!
            // $row = mysqli_fetch_array($record , MYSQLI_NUM);

            if ($record){

                echo "<table>";
                echo "<tr>";
                echo "<th>user_id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";  
                echo "<th>email</th>";
                echo "<th>registration_date</th>";
                echo "</tr>";

                while ($row = mysqli_fetch_array($record , MYSQLI_NUM)) {

                    $user_id = $row[0];
                    $first_name = $row[1]; 
                    $last_name = $row[2];
                    $email = $row[3];
                    $registration_date  = $row[4];

                    echo '<tr>
                    <td><a href = "edit_user.php?id=' . $user_id . '">Edit</a></td>
                    <td><a href = "delete_user.php?id=' . $user_id . '">Delete</a></td>
                    <td>' . $last_name . '</td>
                    <td>' . $first_name . '</td>
                    <td>' . $email . '</td>
                    <td>' . $registration_date . '</td>
                    </tr>';
                }
                echo "</table>";
                mysqli_free_result ($record); // Free up the resources. 

            }

        }catch(Exception $e){
            //echo $e->getMessage();
        }catch(Error $e){
            //echo $e->getMessage();
        }

    ?>

Другие вопросы по теме