CodeIgniter - 检查数据库中是否已存在值

Chr*_*ris 22 codeigniter

我为我的项目运行CodeIgniter ...我相当新,我有我的表单的标准表单验证检查,除了我不知道如何检查数据库中是否已存在该值.

到目前为止,这就是我对表单验证规则的要求

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean');
$this->form_validation->set_rules('rolekey', 'Role Key', 'trim|required|xss_clean');
Run Code Online (Sandbox Code Playgroud)

'rolekey'是我需要检查数据库中的'rolekey'列以查看它是否存在,如果它我需要回击错误.

任何帮助都会很棒.

干杯,

dav*_*gan 51

没有内置的表单验证检查值是否在数据库中,但您可以创建自己的验证检查.

在您的控制器中,创建一个类似于此的方法:

function rolekey_exists($key)
{
    $this->roles_model->role_exists($key);
}
Run Code Online (Sandbox Code Playgroud)

在处理角色的模型中,添加如下内容:

function role_exists($key)
{
    $this->db->where('rolekey',$key);
    $query = $this->db->get('roles');
    if ($query->num_rows() > 0){
        return true;
    }
    else{
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以像这样编写表单验证检查:

$this->form_validation->set_rules('username', 'Username', 'callback_rolekey_exists');
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此页面:

https://www.codeigniter.com/user_guide/libraries/form_validation.html#callbacks-your-own-validation-methods


小智 12

如果要在多个控制器中使用验证功能,则应将规则包含在MY_Form_validation库中.

我在MY_Form_validation中这样做:

function exist($str, $value){       

  list($table, $column) = explode('.', $value, 2);    
  $query = $this->CI->db->query("SELECT COUNT(*) AS count FROM $table WHERE $column = $str'");
  $row = $query->row();

  return ($row->count > 0) ? FALSE : TRUE;

}
Run Code Online (Sandbox Code Playgroud)

然后在您的模型(或控制器)中设置规则时:

$this->form_validation->set_rules('username','username','exist[users.user_name]');
Run Code Online (Sandbox Code Playgroud)

规则调用存在函数.

exists函数在点处展开字符串users.user_name,然后查询数据库以查看是否返回了记录.如果是,则返回false,否则为true.该规则将在错误的回报中失败.


小智 8

您只需编辑验证规则即可

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[table_name.rolename]'); 
Run Code Online (Sandbox Code Playgroud)

  • 我同意,这将是现在最简单的方法.然而,在最初询问此问题时,is_unique验证规则尚不存在(它已在2011年11月14日发布的CodeIgniter 2.1版中添加). (2认同)

小智 6

你可以随时添加

$this->form_validation->set_rules('username','Username','is_unique[users.username]');
Run Code Online (Sandbox Code Playgroud)

其中 user.username 是 table.column