Я получил фатальную ошибку php после сервера передачи с php v5.6.19, до этого у меня не было проблем вообще со следующим скриптом
Получение данных из таблицы db:
function get_department_list($mysqli) { $sql = $mysqli->query("SELECT * FROM `dept` ORDER BY `dept_id` ASC"); if($sql->num_rows > 0){ return $sql; }else{ return false; } }
Заполнение данных в HTML:
<ul class="department overflow-scroll text-center"> <?php $shop = new Shop; $depts = $shop->get_department_list($mysqli); while($dept = $depts->fetch_object()){ echo '<li><a href="'.baseurl.'/shop/'.strtolower(str_replace('\'','',$dept->dept_name)).'">'.$dept->dept_name.'</a></li>'; } ?> </ul>
В итоге у меня появилась ошибка:
Неустранимая ошибка: вызов функции-члена fetch_object () в boolean в C: \ xampp \ htdocs \ project \ include \ header.php в строке 206
Во-первых, вы возвращаете логическое значение из своей функции. Поэтому неудивительно, что PHP говорит вам об этом.
Во-вторых, вы должны держать вопросы раздельными. функция, которая работает с mysqli, должна содержать все объекты mysqli внутри. Возвращает только массив, который можно использовать в любом месте без необходимости повторного вызова функций mysqli.
function get_department_list($mysqli) { $sql = $mysqli->query("SELECT * FROM `dept` ORDER BY `dept_id` ASC"); return $sql->fetch_all(); }
И затем используйте не время, а foreach
foreach ($depts as $dept) ...
Кроме того (и больше для людей, у которых может возникнуть возможность приземлиться на этот вопрос в поисках ответа на их вопрос), вы всегда должны устанавливать правильную отчетность об ошибках для mysqli, как показано в этом ответе
Обновите цикл while для этого случая, когда вы получаете false
из вызова $shop->get_department_list()
обновляется, как и эта проверка на $depts
если какие-либо данные затем получают $dept
:
while($depts && $dept = $depts->fetch_object()){