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

Posted

技术标签:

【中文标题】CodeIgniter - 检查数据库中是不是已存在值【英文标题】:CodeIgniter - Checking to see if a value already exists in the databaseCodeIgniter - 检查数据库中是否已存在值 【发布时间】:2011-05-16 20:45:51 【问题描述】:

我正在为我的一个项目运行 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' 列以查看它是否存在,如果存在我需要回击错误。

任何帮助都会很重要。

干杯,

【问题讨论】:

【参考方案1】:

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

在你的控制器中,创建一个类似这样的方法:

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

【讨论】:

感谢您的评论...太好了...您能给我一个我应该用于该功能的代码示例吗? ...我仍然试图掌握在函数中编写所有内容的窍门。谢谢 太完美了......非常感谢......再问一个问题,它如何返回错误消息'rolekey已存在于数据库中' 在你的 role_exists 函数中,添加这个:$this->validation->set_message('role_exists', 'The %s already exists'); - 把它放在返回 true 之前。我也认为您的回报可能会感到困惑-(可能无关紧要,但请查看 CI 文档)。如果验证失败返回 FALSE,如果验证成功返回 TRUE。我相信如果有重复的角色,上面的代码将返回 true。 (意味着当值不存在时它将失败。更多 codeigniter.com/user_guide/libraries/validation.html 谢谢你......我在我的模型中遇到关于 set_message 的错误调用非对象上的成员函数 set_message() 这很好,但我认为理想情况下你会将 if 语句移至控制器,并且模型中没有任何逻辑。【参考方案2】:

如果您想让您的验证功能在多个控制器中可用,您应该在 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]');

规则调用exist函数。

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

【讨论】:

在你的查询中你错过了一个'【参考方案3】:

您只需编辑您的验证规则

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

【讨论】:

我同意,这将是现在最简单的方法。然而,在最初提出这个问题时,is_unique 验证规则还不存在(它是在 2011 年 11 月 14 日发布的 CodeIgniter 版本 2.1 中添加的)。【参考方案4】:

你总是可以添加

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

其中 user.username 是 table.column

【讨论】:

【参考方案5】:

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

在你的控制器中,创建一个类似这样的方法:

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】:

将 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]');

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

是的,如果你想检查一个值是否已经存在于数据库中,在验证端添加 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 中测试过了。

【讨论】:

【参考方案9】:

Codeigniter4 的小更新

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

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

【讨论】:

以上是关于CodeIgniter - 检查数据库中是不是已存在值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CodeIgniter 中检查多个值是不是唯一

如何在 Codeigniter 中检查是不是设置了会话?

Codeigniter-检查用户是不是存在于月份

检查 codeigniter 查询错误,而不是向用户显示它们

如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?

CODEIGNITER:检查成分是不是存在