PHP MySQL While Loop возвращает только последнюю строку

Мне было поручено представить список всех фотографий, относящихся к фотографу, когда на него нажимают. Мне нужно повторить список фотографий, но в настоящее время отображается только последняя строка.

Возвращенные строки должны выглядеть следующим образом (без маркеров):

1 Amager Standpark Sunset 2010-07-01 _img/1/1.jpg 1
1 Field Landscape 2010-07-09 _img/1/2.jpg 1

Однако мой код возвращает только это:

1 Field Landscape 2010-07-09 _img/1/2.jpg 1

Ниже мой код:

            // SQL query to get all photo data from specific photographer
$query = mysqli_query($con, "SELECT * FROM Photograph WHERE PhotographerId='$photographerID'");
$photos = mysqli_fetch_assoc($query);
$num = mysqli_num_rows($query);

if ($num == 0) {
    echo 'This are no photographs present for this photographer.';
} else if ($num > 0) {

    $list = '';

    while ($photos = mysqli_fetch_array($query)) {

        $list .= $photos['PhotographerId'] . ' ' . $photos['PhotographName'] . ' ' .
                $photos['Date'] . ' ' . $photos['PhotographURL'] . ' ' .
                $photos['Visible'] . ' </br>';
    }

    echo $list;

}
mysqli_fetch_assoc($query); выбирает первую строку, затем mysqli_fetch_array($query) выбирает последующие строки внутри цикла. Но вы никогда ни для чего не используете первый набор результатов. Кроме того, решите, какой массив вам нужен!
ADyson 01.05.2018 15:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
1
1
136
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы вызываете mysqli_fetch_assoc() сразу после того, как эффективно выполняете свой запрос, используя первый набор результатов. Затем, как только вы начнете цикл, вы начнете t = со второй строки.

Его удаление решит вашу проблему и сделает первый набор результатов доступным для вашего цикла.

Вы также можете просто использовать mysqli_fetch_assoc() вместо mysqli_fetch_array() внутри вашего цикла. mysqli_fetch_array() возвращает как ассоциативные, так и численно проиндексированные результаты вашего запроса, которые вам не нужны.

// SQL query to get all photo data from specific photographer
$query = mysqli_query($con, "SELECT * FROM Photograph WHERE PhotographerId='$photographerID'");
$num = mysqli_num_rows($query);

if ($num == 0) {
    echo 'This are no photographs present for this photographer.';
} else if ($num > 0) {

    $list = '';

    while ($photos = mysqli_fetch_assoc($query)) {

        $list .= $photos['PhotographerId'] . ' ' . $photos['PhotographName'] . ' ' .
                $photos['Date'] . ' ' . $photos['PhotographURL'] . ' ' .
                $photos['Visible'] . ' </br>';
    }

    echo $list;

}

Я не знаю, откуда у вас $photographerID, но если он вводится пользователем, этот код уязвим для Атаки с использованием SQL-инъекций. Вам следует рассмотреть возможность использования подготовленные параметризованные операторы, чтобы избежать этого риска.

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