Мне было поручено представить список всех фотографий, относящихся к фотографу, когда на него нажимают. Мне нужно повторить список фотографий, но в настоящее время отображается только последняя строка.
Возвращенные строки должны выглядеть следующим образом (без маркеров):
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()
сразу после того, как эффективно выполняете свой запрос, используя первый набор результатов. Затем, как только вы начнете цикл, вы начнете 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-инъекций. Вам следует рассмотреть возможность использования подготовленные параметризованные операторы, чтобы избежать этого риска.
mysqli_fetch_assoc($query);
выбирает первую строку, затемmysqli_fetch_array($query)
выбирает последующие строки внутри цикла. Но вы никогда ни для чего не используете первый набор результатов. Кроме того, решите, какой массив вам нужен!