@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) }
?>


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

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

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

Войти через центр авторизации
Похожие вопросы
Zelo Москва
от 130 000 руб.
Digital Clouds Новосибирск
от 60 000 руб.
АКМЭ сервис Санкт-Петербург
от 100 000 руб.