0

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

我能得到的任何帮助将不胜感激!

4

3 回答 3

3

改变

$q->num_rows

$q->num_rows()

请参阅此处:codeigniter 指南

尝试做:

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

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

于 2013-06-10T03:47:51.000 回答
1

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

$q->num_rows()

此外,如果查询没有返回任何结果,那么$q将不是一个对象,而是一个 boolean 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);
}
于 2013-06-10T03:47:21.807 回答
1

可能的原因

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

或者

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

先试试var_dump你的结果。

试试这个

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

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

于 2013-06-10T03:53:35.740 回答