猿问

如何在 CI 中检查数据库中的匹配结果?

我希望能够从我的数据库中选择匹配的数据,然后决定要执行的代码,具体来说,我不希望用户能够使用相同的用户名注册两次。


我已经尝试了您通常会尝试的方法,将信息发布到控制器中并将其传递给模型以进行计数。然后我尝试了我见过很多人使用的num_rows();.


controller.php



$userchecker = $_POST['register-username'];

$this->load->model('User_exists');

$this->User_exists->usercheck($userchecker);


            if ($usercheck > 0) {


              echo '<p style="color: orange;">A user with this username already exists!</p>';

              exit();


            }


            else {


//Insert user


model.php



public function usercheck($userchecker) {


$this->db->where('ci_useruid', $userchecker);

$query = $this->db->get('users');


$result = $query->result();

$usercheck = $result->num_rows();

}


我期望发生的是模型根据控制器传递的信息检查用户是否存在,如果存在,则抛出错误。否则,继续像往常一样插入。


我得到的错误是:


调用数组上的成员函数 num_rows()


呼唤远方
浏览 160回答 3
3回答

不负相思意

首先,使用特定的用户名检查数据库中有多少行模型public function usercheck($userchecker) {&nbsp; &nbsp; return $this->db->get_where('ci_useruid', ['ci_useruid' => $userchecker])->num_rows();}控制器根据函数的结果usercheck做你想做的$userchecker = $_POST['register-username'];$this->load->model('User_exists');$rows = $this->User_exists->usercheck($userchecker);if ($rows > 0) {&nbsp; &nbsp; echo '<p style="color: orange;">A user with this username already exists!</p>';&nbsp; &nbsp; exit();}else {&nbsp; &nbsp;//Coding...}

青春有我

你把事情搞混了$query = $this->db->get('users');$result = $query->result();$usercheck = $result->num_rows();您的$query变量包含整个结果对象。因此,它是$query谁持有->result(),->num_rows()等等。通过$result与$query->result()您分配是分配您从数据库中获得的对象数组,而不是辅助方法(例如num_rows()仍然存在于 中$query)也就是说,避免重复用户名的一种更简单的form_validation方法是以这种方式使用该方法:$this->form_validation->set_rules('field_name', 'Field description', 'required|is_unique[tablename.fieldname]');然后在控制器中运行表单验证,您将不需要自己处理唯一性
随时随地看视频慕课网APP
我要回答