在CodeIgniter中调用非对象的成员函数

时间:2015-12-17 17:17:57

标签: sql codeigniter

我正在尝试验证用户名并检查系统中是否已存在此用户名。现在的问题是我在表中的用户列表: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()

2 个答案:

答案 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}}。