Задать вопрос
@Gesha946
Познаю азы PHP

Как вывести из базы данных все записи с помощью цикла while?

Цикл while выводит только последнюю запись из базы.
include_once ('include/connectdb.php'); 
 $res = $mysqli->query("SELECT *FROM `pages` WHERE `Category`='Новости' ");//Запрос в базу по категории
if ($res->num_rows) {
	while($row = $res->fetch_object()){
		$myTitle = $row->Title;
		$myH2 .="<h3>".$row->H2."</h3>";
		$myThumbnail = $row->Thumbnail;
		$mySmalNews ="<p>".$row->SMALNEWS."</p>";
	$content .= sprintf("<div id='news'><div class='smallnews'><h3>%s</h3><img src=%s/>
	<p>%s</p><a href='bignews.php'>Читать далее</a></div></div>", $myH2, $myThumbnail, $mySmalNews);
	}
	}else{
		$myH2 = "Нет записи в базе";
	}
		
 ?>

При объявлении переменной $myH2, что бы выводились все записи, нужно поставить точку перед знаком равно. Как итог - это работает, все выводится, НО, происходит это
Warning: Undefined variable $content in C:\Users\users\Desktop\xamp\htdocs\public_html\news.php on line 11  . Неопределенная переменная.
Хорошо, ругается на точку перед знаком =, убираем. Работает. Но выводит только одну запись. как с этим бороться?
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
1. Переменные лучше инициализировать перед их использованием. В вашем случае перед while следовало бы сделать так:
$content = '';
while($row = $res->fetch_object()){ ... }

2. Вас не смущает, что вы в $content в каждой итерации цикла помещаете div с одним и тем же id?

3. И не совсем понятно, зачем вы для $myH2 пишите так:
$myH2 .="<h3>".$row->H2."</h3>";
У вас будет в ней текст собираться со всех предыдущих итераций.
Ответ написан
@defmin
никак, потому что для работы с массивами в цикле PHP предлагает foreach()

p.s. откажитесь от include_onсe в пользу require - она хотя бы выбросит Вам, используйте include после проверки на существование безошибочного файла, например, is_file, когда нужно просто его подключить
Ответ написан
Комментировать
@artem-dainov
Php, java, js. Boot spring, jquery, git
Чтобы выводить все строки циклом, вы можете сделать следующее.
1. Перейти на PDO. Это позволит вам не только mariadb/mysql использовать, но и еще другие сервер бд, к примеру Postgresql
2. Сделайте запрос к таблице.
3. Возьмите метод ->fetch(PDO::FETCH_ASSOC) и выводите данные через цикл while.
4. Можно еще взять ->fetchAll() и воспользоваться foreach.

Обратите внимание на то, что вызов большого количества записей может привести к подвисаниям.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы