@hooligan377

Ошибка foreach как исправить?

Использую на сервере:
Apache PHP7 Nginx 1.14
PHP 7.0
MYSQL 5.6


имеем следующий код:

<?
$stmt = $base->prepare("SELECT * FROM `services`");
$stmt->execute();
$data = $stmt->get_result()->fetch_assoc(MYSQLI_ASSOC);

?>
<section class="main clearfix">
<?foreach($data as $content):?>
		<div class="work">
			<a href="./services.php?id=<?$content['id']?>">
				<img src="img/work1.jpg" class="media" alt=""/>
				<div class="caption">
					<div class="work_title" hidden="::beaforse">
						<h1><?$content['description']?></h1>
					</div>
				<div></div>
				</div>
			</a>
		</div>
<?endforeach;?>
	</section>


и имеем следующие ошибки:
Warning: mysqli_result::fetch_assoc() expects exactly 0 parameters, 1 given in C:\Server\index.php on line 7 
Warning: Invalid argument supplied for foreach() in C:\Server\index.php on line 9


<?
// Делаю
var_dump($data); 

// получаю

array(4) { ["id"]=> int(1) ["name"]=> string(8) "Проверка" ["description"]=> string(8) "описание" ["image"]=> int(123456) }
?>


В чем же все таки проблема?
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Метод fetch_assoc возвращает одну строку, а вы через foreach пытаетесь работать с ней как с массивом строк. While работает принципиально иначе — там на каждой итерации запрашивается новая строка.

Это, при приведённых вами данных, тем не менее, не может служить причиной появления такого предупреждения, но основная проблема именно в этом. В какой-то момент fetch_assoc возвращает null, чтобы показать, что строки закончились и вы передаёте его в foreach, который null не понимает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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