Я извлекаю некоторые данные из базы данных mysql. Есть две петли, которые используют один и тот же набор результатов.
while ($row = mysqli_fetch_array($newsQuery)) { echo "<a href='news-article.php?articleId=" .$row["news_id"]."' class='list-group-item active'>".$row["news_title"]."</a>"; }
Этот цикл заканчивается успехом. то на той же странице у меня следующий цикл.
while ($row = mysqli_fetch_array($newsQuery)) { echo $row["news_content"]; }
Этот цикл ничего не возвращает, даже если в таблице есть контент. Когда я пробую это в первом цикле. содержимое отображается правильно. Любая идея о том, что я делаю неправильно.
Из PHP mysqli_fetch_array DOCS :
Возвращает массив, соответствующий выбранной строке или NULL, если для набора результатов, представленного параметром результата, больше нет строк.
Вы используете цикл while в $row = mysqli_fetch_array($newsQuery)
Это означает, что цикл будет продолжаться до тех mysqli_fetch_array($newsQuery)
пока mysqli_fetch_array($newsQuery)
вернет NULL
.
Вот почему вы не можете использовать этот цикл снова, поскольку mysqli завершил получение результатов, и mysqli_fetch_array($newsQuery)
теперь возвращает NULL, пока вы не сделаете новый запрос.
Попробуйте сначала заполнить переменную с результатами, затем зациклируйте на эту переменную:
$results = array(); while ($row = mysqli_fetch_array($newsQuery)) { $results[] = $row; } foreach ($results as $key => $row) { echo "<a href='news-article.php?articleId=" .$row["news_id"]."' class='list-group-item active'>".$row["news_title"]."</a>"; } foreach ($results as $key => $row) { echo $row["news_content"]; }
В то время как лучше избегать логики, которая приводит к циклическому переходу через результирующий набор в два раза, при необходимости вам нужно вернуть результирующий набор к началу:
mysqli_data_seek($newsQuery, 0);
Поскольку вы уже $newsQuery
значение $newsQuery
Попробуйте этот код
//temporary save the news content into array $content = array(); $x=0; while ($row = mysqli_fetch_array($newsQuery)) { echo "<a href='news-article.php?articleId=" .$row["news_id"]."' class='list-group-item active'>".$row["news_title"]."</a>"; $content[$x]= $row["news_content"]; $x++; }
и если вы хотите получить его
//now retrieve it for($y=0; $y<count($content); $y++) { echo $content[$y]+"<br/>"; }