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

时间:2010-11-28 13:21:08

标签: 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');

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

任何帮助都会很棒。

干杯,

9 个答案:

答案 0 :(得分:45)

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

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

function rolekey_exists($key)
{
    $this->roles_model->role_exists($key);
}

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

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

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

$this->form_validation->set_rules('username', 'Username', 'callback_rolekey_exists');

有关详细信息,请参阅此页:

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

答案 1 :(得分: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;

}

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

$this->form_validation->set_rules('username','username','exist[users.user_name]');

规则调用存在函数。

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

答案 2 :(得分:7)

您只需编辑验证规则

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

答案 3 :(得分:3)

你总是可以添加

$this->form_validation->set_rules('username','Username','is_unique[users.username]');

其中user.username是table.column

答案 4 :(得分:1)

将is_unique规则添加到表单验证中,如下所示

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[your_database_table_name.rolename]');
$this->form_validation->set_rules('rolekey', 'Role Key', 'trim|required|xss_clean|is_unique[your_database_table_name.rolekey]');

答案 5 :(得分:1)

这对我有用,可能对某人有用

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

function rolekey_exists('table','field','value')
{
  $this->roles_model->role_exists($key);
}

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

function role_exists($table,$field,$value)
{
    $this->db->where($field,$value);
    $query = $this->db->get($table);
    if (!empty($query->result_array())){
        return 1;
    }
    else{
        return 0;
    }
}

答案 6 :(得分:1)

如果您使用的是新的 Codeigniter4,您实际上可以实现这一点,而无需在控制器中添加任何方法:使用 is_not_unique 规则,您可以检查是否在数据库中找到了值,如果没有则返回错误。 ..基本上与 is_unique 相反!

答案 7 :(得分:0)

是的,如果要检查数据库中是否已存在值,则在验证端添加is_unique是正确的。因此,您无需在控制器中创建函数即可。

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[table_name.table_field]');

$this->form_validation->set_rules('rolekey', 'Role Key', 'trim|required|xss_clean|is_unique[table_name.table_field]');

然后,您将在输入区域中看到一条错误消息。例如:用户名字段必须包含一个唯一值。

我已经在Codeigniter 3.0.0中对其进行了测试。

答案 8 :(得分:0)

Codeigniter4 的小更新

在 CI4 中,您可以使用验证规则“is_not_unique[table.field]”,所以这样做

$validation->setRule('email', 'Email', 'trim|required|valid_email|is_not_unique[users.email]');