我是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;
}
我将非常感谢你能得到的任何帮助!
答案 0 :(得分:3)
变化
$q->num_rows
到
$q->num_rows()
尝试做:
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 )
//查询成功,至少有一行。