【问题标题】:CodeIgniter 3 is_unique validation when table name have dot a "."CodeIgniter 3 is_unique 验证当表名有点“。”
【发布时间】:2020-03-28 19:35:30
【问题描述】:

如果我有一个名为“dbo.Usuarios”的表,我在使用 Codeigniter 3 时遇到问题,如何在 is_unique 验证中插入?问题在于_unique 用点分隔表和列。

问题来了:

$is_unique =  '|is_unique[dbo.Usuarios.Email]';

你怎么看,我的表名有一个点,所以系统把"dbo"当作表名,"Usuarios"当作列名。

这里是完整的代码:

$id= $this->session->userdata('user_id');
    $tablas = $this->db->query('SELECT * FROM dbo.Usuarios WHERE ID ='.$id.'');
    foreach ($tablas->result_array() as $row){
    $samemail = $row['Email'];    
    }
    if($this->input->post('email') != $samemail) {
    $is_unique =  '|is_unique[dbo.Usuarios.Email]';
    } 
    else {
   $is_unique =  '';
    }    

    $this->form_validation->set_rules('emailf', 'Email', 'trim|required|valid_email|max_length[20]'.$is_unique);
    if ($this->form_validation->run() == FALSE)
    {
    $this->session->set_flashdata('emailunico', 'El Email ingresado ya esta asociado a otra cuenta.');
    redirect('escritorio');  
    }
    else {
    #othercode
    }

【问题讨论】:

  • 你为什么使用dbo.作为前缀?
  • 你真的不应该在表名中使用.。标准建议是使用 unsercores _ 代替,因为句点被解释为模式和表名之间的“边界”。话虽如此,is_unique 验证方法不支持 schema.table.field 参数(它只需要一个表字段对),因此您需要修改或扩展 form_validation 库才能为您工作跨度>
  • 为了记录,我决定使用 dbo。作为前缀,感谢@M.Hemant 的建议

标签: php codeigniter codeigniter-3


【解决方案1】:

尝试像这样修改is_unique规则:

$is_unique =  '|is_unique[dbo.Email]|is_unique[Usuarios.Email]';

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多