我的函数在移动到新服务器后返回 false


My function returns false after moving to a new server

在使用 php v5.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;
    }
}

在 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 中调用布尔值上的成员函数 fetch_object

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

其次,你应该把事情分开。 与MySQLli一起使用的函数应该将所有MySQLLI的东西都放在里面。返回只是一个数组,可以在任何地方使用,而无需再次调用 mysqli 函数。

function get_department_list($mysqli)
{
    $sql = $mysqli->query("SELECT * FROM `dept` ORDER BY `dept_id` ASC");
    return $sql->fetch_all();
}

然后不是在同时而是用于每个

foreach ($depts as $dept) ...

此外(对于可能有机会登陆这个问题寻找问题的答案的人来说,还有更多),您应该始终为 mysqli 设置适当的错误报告,如本答案所示

当您

从调用中获得false时,更新$shop->get_department_list()

循环

像这样更新时检查是否有任何数据$depts然后得到$dept

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