Одной из самых популярных ошибок, с которой мне и моим ученикам приходится сталкиваться, это " Function fetch_assoc() on a non-object ". Регулярно мне присылают вопросы с этой ошибкой и спрашивают, что делать. Давайте с Вами разберём основные причины возникновения данной ошибки.
Одной из самых популярных ошибок, с которой мне и моим ученикам приходится сталкиваться, это "Function fetch_assoc() on a non-object". Регулярно мне присылают вопросы с этой ошибкой и спрашивают, что делать. Давайте с Вами разберём основные причины возникновения данной ошибки.
В оригинале данная ошибка означает, что мы пытаемся вызвать метод fetch_assoc() у не объекта. Например, она возникнет здесь:
<?php
$x = false;
$x->fetch_assoc();
?>
У нас переменная "x" является булевской, поэтому никаких методов у неё нет, о чём и сообщает нам PHP. Но это базовая ошибка, которую вряд ли кто-то допустит. Поэтому чаще всего "Function fetch_assoc() on a non-object" является лишь следствием другой ошибки, на которую PHP не реагирует:
<?php
$result_set = $mysqli->query("SELECT * FROM WHERE `id`='3'");
$row = $result_set->fetch_assoc();
?>
У нас возникает всё та же ошибка, но теперь она не очевидна. Данная ошибка нам сообщает, что переменная "result_set" не является объектом. Движемся дальше, а почему она не является объектом, где мы её определили? Поднимаем глаза выше и видим, что в неё мы должны поместить результат выборки. И вот именно в этой строчке и содержится ошибка. Если бы $mysqli был не объектом, или мы бы ошиблись с написанием метода query(), нам бы PHP об этом сразу сообщил.
Следовательно, вся проблема в строковой переменной с запросом. Разумеется, на содержимое строки PHP никак не реагирует, но в этом запросе содержится ошибка. Внимательно к нему приглядевшись, можно заметить, что там не хватает названия таблицы.
Исправив запрос, ошибка "Function fetch_assoc() on a non-object" исчезнет. Как видите, в большинстве случаев данная ошибка возникает именно из-за неправильного запроса.
Цель данной статьи была не только рассказать об этой ошибке, но и показать, что не надо зацикливаться на той строке, где, как показывает PHP, содержится ошибка.
