在使用 mysqli::fetch_object();时遇到问题


Having troubles with mysqli::fetch_object();

在谷歌上阅读了大约5个小时后,我无法使用MySQLi修复某些问题。

一生都在MySQL编程,现在我正在尝试使用mysqli更新我的知识,但我遇到了一些麻烦。

我有一个名为 news_Default() 的小函数,如下所示:

    <?php 
    Class Test extends DB{
    public function news_Default(){
        $query = $this->db->query('SELECT * FROM news');
        if($query->num_rows == 0)
            return false;
        else
            return $query->fetch_object();
        }
    }
    ?>

我以这种方式使用:

    <?php
    while($new = $panel->news_Default()){
        print_r($new);
    }
    ?>

在 MySQL 中,当我返回对象时,我可以毫无问题地将它与"while"或"foreach"循环一起使用,但真正的问题就在这里,使用 mysqli。

当我使用"while"(第二个代码块)时,它循环了 6,000 次(我使用 $counter++ 来测试它),当我使用 foreach 时,它正好循环了 7 次。在我的名为"新闻"的表格中,我只有两条记录。那么,我怎样才能退回对象并在外面使用它而不会遇到这个问题呢?因为当我在类中使用它时,例如 $new = $query->fetch_object() 工作得很好。

每次调用 news_Default 时,您都在执行 sql 查询。

检查修复它。

Class Test extends DB{
    private $_cached_news = null;                    // let's store our query result
    public function news_Default(){
        if ($this->_cached_news === null){           // not stored?
            $this->_cached_news = $this->db->query('SELECT * FROM news');} // let's query
        $return = $query->fetch_object();            // get next object
        if (!$return)                                // there is no objects anymore?
            $this->_cached_news = null;              // let's clear our result
        return $return;
        }
    }