【问题标题】:Fatal error: Call to a member function result() on a non-object in Codeigniter致命错误:调用 Codeigniter 中非对象上的成员函数 result()
【发布时间】:2015-12-12 19:48:23
【问题描述】:

致命错误:在第 111 行对 D:\wamp\www\ocss\application\core\My_Model.php 中的非对象调用成员函数 result()

class Report extends MY_Controller{
    public function item_ladger()
    {
        $material = $this->Material_Model->get(); // when i call it here it works fine
        $inventory = $this->db->query("CALL inventory($id)")->result_array();
        $material = $this->Material_Model->get(); // when i call it here it Generate Fatal error: Call to a member function result() on a non-object in
    }
}

背后的原因是什么?

编辑

这是我的材料模型,它有表名和所有表字段

class Material_Model extends MY_Model
{
    const DB_TABLE = 'material';
    const DB_TABLE_PK = 'material_id';

    public $material_id;
    public $material_name;
    public $size;
    public $rate;
}

这是我的 MY_Model,它有表名和获取所有结果的方法

class MY_Model extends CI_Model {
    const DB_TABLE = 'abstract';
    const DB_TABLE_PK = 'abstract';

    public function get($limit = 500, $offset = 0,$desc=true) {
    if ($limit) {
        if ($desc)
            $query = $this->db->order_by($this::DB_TABLE_PK, 'DESC')->get($this::DB_TABLE, $limit, $offset);
        else
            $query = $this->db->get($this::DB_TABLE, $limit, $offset);
    }
    else {
        $query = $this->db->get($this::DB_TABLE);
    }

    $ret_val = array();
    $class = get_class($this);

    foreach ($query->result() as $row) {
        $model = new $class;
        $model->populate($row);

        $ret_val[$row->{$this::DB_TABLE_PK}] = $model;
    }
    return $ret_val;
}

【问题讨论】:

  • inventory 函数的结果是什么?探索$this->db->query("CALL inventory($id)") 值,在你的情况下可能是TRUE,而不是对象。
  • $material 行库存产生的错误是 mysql 中的过程

标签: php codeigniter


【解决方案1】:

最后我通过简单地调用mysql查询而不是存储过程解决了我的问题

class Report extends MY_Controller{
    public function item_ladger()
    {
        $material = $this->Material_Model->get(); // when i call it here it works fine
        $inventory = $this->db->query("My Query To Database")->result_array();
        $material = $this->Material_Model->get(); // now when i call it here there is no error
    }
}

但是当我调用存储过程而不是查询时,我对那个错误感到困惑

【讨论】:

    【解决方案2】:
    class Report extends MY_Controller{
        public function item_ladger()
        {
            $this->load->model("Material_Model"); # loding Model
            $inventory = $this->Material_Model->get_data(); # caling Model to do my code
    
            if ($inventory['cup']) { # retrivig data from retund array
                echo "I never ate Cup Cakes";
            }
    
        }
    }
    

    在模型中

    public function get_data()
    {
        $query = $this->db->get('cake'); # get data from table
        $result = $query->result_array(); # re-Assign as objective array
        return $result; # return data
    }
    

    Codeigniter SELECT

    【讨论】:

    • $inventory = $this->db->query("CALL inventory($id)")->result_array();这一行我正在调用mysql程序;吹它得到我的材料,我在自动加载配置文件中加载了 Material_Model
    • Material_Model内扩展MY_Model所有数据库字段和表名。并在 My_Model 中的 get 方法中,它从数据库中获取所有记录并制作并返回对象数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2015-09-25
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多