我正在尝试验证用户名并检查系统中是否已存在此用户名。现在的问题是我在表中的用户列表:ea_user
以及表格中的用户设置:ea_user_settings
。现在:
ea_user > contain the id of the user that isn't remove from the system, the field 'data'
ea_user_settings > contain the username
所以我的功能是:
public function validate_username($username, $user_id)
{
$num_rows = $this->db->join('ea_user_settings', 'ea_user_settings.id = ea_user.id', 'inner')
->get_where('ea_user_settings',
array('username' => $username, 'id_users <> ' => $user_id, 'ea_user.data' => 0))->num_rows();
return ($num_rows > 0) ? FALSE : TRUE;
}
问题是我收到此错误:
致命错误:在非对象
上调用成员函数num_rows()
答案 0 :(得分:0)
试试这个
public function validate_username($username, $user_id)
{
$this->db->select(*);
$this->db->from('table_name');
$this->db->join('ea_user_settings', 'ea_user_settings.id = ea_user.id', 'inner')
$this->db->get_where('ea_user_settings', array('username' => $username, 'id_users <> ' => $user_id, 'ea_user.data' => 0));
$query = $this->db->get();
$result = $query->result_array(); # add this
$count = count($result);
if (!empty($count)) {
return true;
}
else{
return false;
}
}
}
答案 1 :(得分:0)
没有记录,但任何get_where()
函数(在您的情况下为FALSE->num_rows()
)都可以返回FALSE。 (这很难理解。)这似乎是你的问题。 public function validate_username($username, $user_id)
{
$this->db->select(*)
->from('ea_user_settings')
->join('ea_user_settings', 'ea_user_settings.id = ea_user.id', 'inner')
->where(array('username' => $username, 'id_users <> ' => $user_id, 'ea_user.data' => 0));
$compiled_select = $this->db->get_compiled_select(NULL, FALSE);
//inspect or var_dump($compiled_select) to see what query statement was built.
没有意义,因为FALSE不是对象。
这通常是因为查询无法正确构建。 可以通过执行此操作来检查已编译的查询。
get()
在设置所有连接之后,我在检查$compiled_select = $this->...
的真实性之前使用其返回的查询的其他部分和其他部分。在你的情况下这样的事情。代码在行 if($query = $this->db->get())
{
return ($query->num_rows() > 0) ? FALSE : TRUE;
}
else
{
throw new Exception("get call returned FALSE");
}
}
validate_username()
对我来说,Exception主要在开发过程中很有用。但是如果它有用,你可以在try catch块中调用{{1}}。