【问题标题】:Call to a member function num_rows() on a non-object在非对象上调用成员函数 num_rows()
【发布时间】:2013-12-23 22:09:32
【问题描述】:

我正在使用 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)');

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

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

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

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

【问题讨论】:

    标签: php activerecord codeigniter-2


    【解决方案1】:

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

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

    你应该把if改成这样:

    if (count($query) > 0) {
    

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

    【讨论】:

      【解决方案2】:

      调用 ->result(),您将查询执行的结果保存在一个数组中。你可以这样调用你的变量,例如:

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

      然后将您的测试更改为:

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

      【讨论】:

        猜你喜欢
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 2015-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-29
        相关资源
        最近更新 更多