与num_rows的codeigniter问题(可能的错误?)

时间:2013-06-10 03:45:10

标签: php codeigniter

我是codeignitor的新手,我一直在选择查询时遇到重大问题。我原本以为是我是一个新手(也许是新手),但事实上,我花了3天的时间学习指南和视频,我认为这是一个问题。

使用时:

if ( $q->num_rows > 0 )

我不断得到错误: 尝试获取非对象的属性

我正在遵循创建登录身份验证系统的指南。我正在键入教师所拥有的内容,但是我无法通过该错误,而且不仅仅是本指南,我所遵循的其他指南,在尝试获取行数据时也导致了相同的错误。

这是我的模特:

public function verify_user($email, $password)
{
$q = $this
        ->db
        ->where('email_address', $email)
        ->where('password', sha1($password))
        ->limit(1)
        ->get('users');

   if ( $q->num_rows > 0 ) {
        return $q->row();
       }
       return false;
}

我将非常感谢你能得到的任何帮助!

3 个答案:

答案 0 :(得分:3)

变化

$q->num_rows

$q->num_rows()

见这里:codeigniter guide

尝试做:

echo $this->db->last_query(); //after $this->db ...... get('users');

检查生成的sql以查看sql语句中的任何错误

答案 1 :(得分:1)

您需要在num_rows之后使用括号,因为num_rows是一个函数(方法),而不是属性:

$q->num_rows()

此外,如果查询未返回任何结果,则$q将不是对象,而是布尔值FALSE

建议:

public function verify_user($email, $password)
{
    $user = $this
        ->db
        ->where('email_address', $email)
        ->where('password', sha1($password))
        ->limit(1)
        ->get('users')
        ->row();

    return (empty($user) ? false : $user);
}

答案 2 :(得分:1)

可能的原因

它的功能,不是属性。将其更改为$qry->num_rows()

您的查询不成功,并返回FALSE

首先尝试var_dump您的结果。

试试这个

if( $qry != FALSE && $qry->num_rows() > 0 )

//查询成功,至少有一行。