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

时间:2016-03-22 06:45:21

标签: php mysqli

我使用php v5.6.19转移服务器后出现php致命错误,之前我对以下脚本没有任何问题

从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>

最后我收到了一个错误:

  

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

2 个答案:

答案 0 :(得分:2)

首先,您将从函数返回一个布尔值。所以,难怪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设置正确的错误报告,如this answer

中所示。

答案 1 :(得分:0)

false来电

获取$shop->get_department_list()时,针对该案例更新您的while循环 如果有任何数据$depts

,那么

会像$dept一样检查while($depts && $dept = $depts->fetch_object()){

java.io.FileNotFoundException: /storage/emulated/0/LazyList/-1246063373: open failed: ENOENT (No such file or directory)