无法执行codeigniter查询

时间:2013-03-09 08:41:15

标签: php mysql codeigniter

我正在尝试执行以下查询:select*from bookdetails where quantity>0 ORDER BY created_date DESC

但我收到Call to a member function num_rows() on a non-object in...这样的错误 请帮我解决这个问题。

public function get_all_book_list_ByCreatedDateDSC($limit, $start,$sortsesval)
{
    $this->load->database();  
    $this->db->limit($limit, $start);  

     $query=$this->db->join('coverdetails', 'coverdetails.cover_id = bookdetails.cover_id')->order_by('created_date', 'DESC')->get_where('bookdetails',array('quantity >', '0')); 

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

}

3 个答案:

答案 0 :(得分:0)

您的错误消息告诉您$ query不是对象。你不能在非对象上调用成员函数!

您的“加入”方法未返回对象。

设置$ query后尝试设置print_r($query)var_dump($query),以确切了解它是什么。

答案 1 :(得分:0)

尝试这样的功能

public function get_all_book_list_ByCreatedDateDSC($limit, $start,$sortsesval)
{
    $this->load->database();  
    return  $this->db
                        ->join('coverdetails', 'coverdetails.cover_id = bookdetails.cover_id')
                        ->order_by('created_date', 'DESC')
                        ->limit($limit, $start)
                        ->get_where('bookdetails',array('quantity >', '0'))
                        ->result_array();
}   

当您的查询返回null(找不到记录)时,您将无法访问该对象,因为在$ query中它为null。您需要以数组格式返回数据,因此请使用result_array。有关详细信息,请参阅here;使用它你不需要循环对象。它会为你提供现成的阵列。

在控制器中,您可以检查结果是null还是数组。

答案 2 :(得分:0)

试试这个:

$this->db->select('*');
$this->db->where('quantity >', $id); 
$this->db->join('coverdetails', 'coverdetails.cover_id = bookdetails.cover_id');
$this->db->order_by('bookdetails.created_date', 'desc');
$this->db->limit($limit, $start);
$query = $this->db->get('bookdetails');
        if($query -> num_rows() == 1)
                    return $query->result_array();
       else
         return false;