繁体   English   中英

Codeigniter-调用非对象上的成员函数

[英]Codeigniter - Call to a member function on a non-object

看着这个错误,我已经拔头发太久了。 我正在使用Codeigniter 2,并创建了MY_Controller类以将一些设置加载到我的会话数据中。

您可以在下面看到:

class MY_Controller extends CI_Controller {  
    protected $ajax = 0;

    public function __construct() {
        parent::__construct();            
        $this->load->model('settings_model');

        //is the session user agent set
        if ($this->session->userdata('browser') == false)
        {
            $this->load->library('user_agent');
            $this->session->set_userdata(array(
                'browser' => $this->agent->browser(),
                'browser_version' => $this->agent->version(),
                'is_mobile' => $this->agent->is_mobile() ? 1 : 0
            ));                                                          
        }

        //is the settings loaded
        if ($this->session->userdata('league_name') == false)
        {                                       
            $this->Settings_model->get_general_settings();
        }

        //get the menu if we need to
        //if ($this->session->userdata('menu') == false)
            //$this->Settings_model->get_menu_items();  

        //set the main part of the title
        $this->set_title($this->session->userdata('league_name'));

        //get that referring url
        $this->session->set_userdata('refered_from', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : base_url()); 

        //ajax request
        $this->ajax = isset($_GET['ajax']) ? 1 : 0;
    }
}

我遇到问题的地方是我不断收到此错误:

Fatal error: Call to a member function get_general_settings() on a non-object in C:\xampp\htdocs\osmdev\application\controllers\welcome.php on line 12

这是我正在加载的Settings_model.php文件,是的,它在我的application / models文件夹中:

class Settings_model extends CI_Model 
{                        
    // Call the Model constructor
    function __construct() {         
        parent::__construct();
    }

    //get the general settings
    function get_general_settings() {
        $query = "SELECT setting_id, variable, value FROM settings WHERE non_session = 0";
        $result = $this->db->query($query);

        foreach ($result->result_array() as $row)
            $this->session->set_userdata($row['variable'], stripslashes($row['value']));    
    }

    //get all the settings we have
    function get_all_settings() {        
        $query = "SELECT setting_id, variable, value FROM settings";
        $result = $this->db->query($query);

        foreach ($result->result_array() as $row)
            $this->session->set_userdata($row['variable'], stripslashes($row['value']));
    }

    //get a specfic setting variable
    function get_specific_setting($var) {           
        $query = "SELECT setting_id, variable, value FROM settings WHERE variable = '".$var;
        $result = $this->db->query($query);

        foreach ($result->result_array() as $row)
            $this->session->set_userdata($row['variable'], stripslashes($row['value']));   
    }

    //get a specific type of setting
    function get_type_setting($type) {
        $query = "SELECT setting_id, variable, value FROM settings WHERE action = '".$type;
        $result = $this->db->query($query);

        foreach ($result->result_array() as $row)
            $this->session->set_userdata($row['variable'], stripslashes($row['value']));    
    }

    //get all the menu items
    function get_menu_items($type=0) {
        $query = "SELECT menu_id, title, menu_url, parent_id, level, function_used, perm_id, icon FROM menu WHERE active = 1 AND is_admin_menu = '".$type;
        $result = $this->db->query($query);

        foreach ($result->result_array() as $row)  
            $items[$row['menu_id']] = $row;  

        $this->session->set_userdata('menu', $items);
    }  
}

我正在尝试调用get_general_settings函数。 谁能看到我在做什么错?

您可以尝试设置模型以将$ row存储到数组中,然后返回该数组。

您的模型:

function get_general_settings() {
    $rows = array();
    $query = "SELECT setting_id, variable, value FROM settings WHERE non_session = 0";
    $result = $this->db->query($query);

    foreach ($result->result_array() as $row)
        $variable = $row['variable'];
        $value = stripslashes($row['value']);
        $rows[] = $variable[$value];

    return $rows[]

您的控制器:

//is the settings loaded
    if ($this->session->userdata('league_name') == false)
    {                                       
        //set userdata to returned $rows[]
        $this->session->set_userdata($this->Settings_model->get_general_settings());
    }
//echo last_query to test in mysql
$this->db->last_query();

看看是否可以帮助您解决问题。 我会print_r($ this-> Settings_model-> get_general_settings()); 只是看是否在数组中放置了任何东西。

然后,如果没有任何内容,则回显last_query,以查看其对MySQL的要求,然后在mysql中运行返回的查询,并查看是否至少得到一行。

当您的数据库用户对您要查询的表没有选择权限时,可能会发生此错误。 这没有任何意义,但有时会发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM