【问题标题】:Message: Call to a member function result_array() on a non-object消息:在非对象上调用成员函数 result_array()
【发布时间】:2015-11-14 20:37:31
【问题描述】:

我是 Codeigniter 的新手,我仍然对数据库交互有所了解。我无法弄清楚为什么这会给我一个错误,我认为它与查询有关,但我可以直接针对数据库运行它而不会出错。有什么想法吗?

public function getLastSafetyTraining()
    {

        $query = "SELECT entry_date as date, field_id_108 as instructor FROM exp_channel_titles t, exp_channel_data d WHERE t.channel_id = 27 AND t.entry_id = d.entry_id";

        $result = $this->db->query($query);

        foreach ($result->result_array() as $row)
        {
            echo $row['date'];
            echo $row['instructor'];
        }

    }

添加成功的数据库调用:

public function getListOfInstructors()
    {
        $query = $this->db->select('member_id, email, group_id')
                            ->where('group_id >', 7)
                            ->limit(10, 20)
                            ->get('exp_members');

        return $query->result_array();
    }

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    该错误可能是由于查询(以及生成的 result() 对象)为空。在尝试使用 result() 对象之前,确保查询实际返回至少一条记录:

    if($query->num_rows() > 0){
        return $query->result(); //this thing has to be done in model
    }
    

    实际上,回显部分必须在视图中完成,您只需将结果返回给控制器 在控制器中加载上述模型并调用模型函数为

    $var = $this->model->function();
    

    处理结果,然后将数据传递给查看和回显

    更清楚地说,不要在模型中回显任何内容[所有查询部分都已完成],模型仅返回查询结果,以确保我们使用 if 条件并将结果返回给控制器。

    这个模型必须加载到控制器中并从模型中获取返回值,所以我们使用 $this->load->model('nameof model');

    然后获取这些值并将其保存在变量中为

    $var = $this->model->function(); //now pass this to view after manipulating it as and echo in view
    

    在你的模型中你必须这样做

    public function getLastSafetyTraining()
        {
    
            $query = "SELECT entry_date as date, field_id_108 as instructor FROM exp_channel_titles t, exp_channel_data d WHERE t.channel_id = 27 AND t.entry_id = d.entry_id";
    
            $result = $this->db->query($query);
           $count = count($result);
    
        if(empty($count) || $count > 1)
        {
            $log = 0;
            return $log ;
        }
        else
        {
            return $result;
        }
    
    
    
        }
    

    你的控制器

    public function getListOfInstructors()
        {
           $this->load->model('Name of your model');
                $result = $this->Name_of_model->Name_of_function_of_model();
                if($result==0) {
                    echo "Nothing found";
                    }
                    else {
                        $data['var']=$result;
                        $this->load->view('header');
                        $this->load->view("your view", $data);
                    }
    
    
    
        }
    

    【讨论】:

    • 你们是对的,我得到一个空的结果集。但是我可以通过 PHPMyAdmin 运行该查询并获得结果,那么 CI 中的查询有什么问题?
    • @user1684180 奇怪,您是否正确加载了数据库配置尝试将您的查询打印为 print_r($query);
    • 是的,因为我的控制器在此之前调用了一个模型函数,该函数正在从数据库返回值。我将更新原始帖子以包含此内容。
    • @user1684180 你做错了我会更新我的答案怎么做
    • @user1684180 此函数 getListOfInstructors() 在模型或控制器中
    【解决方案2】:

    你可以修改你的代码如下:

    public function getLastSafetyTraining()
        {
    
            $query = "SELECT entry_date as date, field_id_108 as instructor FROM exp_channel_titles t, exp_channel_data d WHERE t.channel_id = 27 AND t.entry_id = d.entry_id";
    
            $result = $this->db->query($query);
    
            print_r($result); die; // this is added line for debug
    
    
            foreach ($result->result_array() as $row)
            {
                echo $row['date'];
                echo $row['instructor'];
            }
    
        }
    

    您可以通过这样做进行调试,如果您无法在此处编写输出打印的内容,我将给出您的代码的确切问题。

    【讨论】:

      猜你喜欢
      • 2015-02-06
      • 2013-08-23
      • 2017-07-05
      • 2017-10-22
      • 1970-01-01
      • 2017-02-16
      • 2010-09-26
      • 2012-04-20
      • 2015-05-01
      相关资源
      最近更新 更多