PHP致命错误:在布尔值上调用成员函数fetch_object()

PHP致命错误:在布尔值上调用成员函数fetch_object(),php,mysqli,Php,Mysqli,在使用PHPV5.6.19传输服务器之后,我遇到了php致命错误,在此之前,我对下面的脚本没有任何问题 从数据库表获取数据: function get_department_list($mysqli) { $sql = $mysqli->query("SELECT * FROM `dept` ORDER BY `dept_id` ASC"); if($sql->num_rows > 0){ return $sql; }else{

在使用PHPV5.6.19传输服务器之后,我遇到了php致命错误,在此之前,我对下面的脚本没有任何问题

从数据库表获取数据:

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;
    }
}
<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>
在HTML中填充数据:

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;
    }
}
<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>
最后我犯了一个错误:

致命错误:在第206行的C:\xampp\htdocs\project\include\header.php中对布尔值调用成员函数fetch_object()


首先,从函数返回一个布尔值。所以,难怪PHP会这么说

第二,你应该把事情分开。与mysqli一起使用的函数应该将mysqli的所有内容都保存在内部。返回值只是一个数组,可以在任何地方使用,无需再次调用mysqli函数

function get_department_list($mysqli)
{
    $sql = $mysqli->query("SELECT * FROM `dept` ORDER BY `dept_id` ASC");
    return $sql->fetch_all();
}
然后不要用while,而要用foreach

foreach ($depts as $dept) ...

除此之外(对于那些可能有机会在这个问题上找到答案的人来说,更多的是)你应该为mysqli设置正确的错误报告,如

当你从
$shop->get_department_list()
调用时更新你的while循环中所示

像这样更新检查
$depts
如果有数据,则获取
$dept

while($depts && $dept = $depts->fetch_object()){

您的函数
get\u department\u list
返回false,该值被分配给
$depts
,因此当您尝试
fetch\u object()
时,它会抛出该错误。您可能需要打印出为什么
$sql->num\u rows
不是>0