消息:在非对象上调用成员函数result_array()

时间:2015-08-21 01:56:47

标签: codeigniter

我是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();
    }

2 个答案:

答案 0 :(得分:0)

错误可能是由于查询(以及结果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);
                }



    }

答案 1 :(得分:0)

您可以修改以下代码:

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'];
        }

    }

你可以通过这样做进行调试,如果你不能在这里写出什么输出打印,我会给出你的代码的确切问题。