在非对象上调用成员函数num_rows()

时间:2013-12-23 22:09:32

标签: php activerecord codeigniter-2

我正在使用CodeIgniter,我想从数据库中的表中获取一些数据。

在我的模型中,我有这个功能:

public function fetch_cours($limit, $start, $element) {

        $id_element = $this->db->from('element')
                               ->where('name',$element)
                               ->limit(1)
                               ->get()
                               ->result();

        $query = $this->db->from('cour')
                           ->where('id_element',(int) $id_element[0]->id)
                           ->limit($limit, $start)
                           ->get()
                           ->result();
        var_dump($query);

        if ($query->num_rows() > 0) {
            foreach ($query->result() as $row) {
                $data[] = $row;
            }
            return $data;
        }
        return false;
   }

我希望此函数返回cour表中的一些记录。

在我的控制器中我有这一行:

$cours = $this->cours_m->fetch_cours(10,0,'Programmation Orientée Objet (Java)');

当我打电话给我的控制器时,我收到了这条消息:

enter image description here

第38行是:if ($query->num_rows() > 0) {

所以我做了一个var_dump($ query),这是输出:

enter image description here

有什么问题?我该如何解决呢?

2 个答案:

答案 0 :(得分:3)

调用 - > result(),您可以在数组中执行查询。您可以像这样调用变量,例如:

$cours = $this->db->from('cour')
    ->where('id_element',(int) $id_element[0]->id)
    ->limit($limit, $start)
    ->get()
    ->result();

然后将测试更改为:

if (count($cours) > 0) {
    foreach ($query->result() as $row) {
        $data[] = $row;
    }
    return $data;
}

答案 1 :(得分:2)

创建$query变量时,您已添加了->result()

所以$query是一个行对象数组。

您应该将if更改为:

if (count($query) > 0) {

例如,可能会将变量重命名为$results