【问题标题】:Managing "A Database Error Occurred" 1062 error in CodeIgniter在 CodeIgniter 中管理“发生数据库错误”1062 错误
【发布时间】:2014-12-05 14:11:27
【问题描述】:

我是 CodeIgniter 新手,我开始探索 CI 功能,尤其是在本例中是 Form 构造。我已经阅读了有关此的文档并在网络上进行了搜索,但没有找到解决方案。

主要问题是,当我为一个字段指定它的值必须是唯一的时,如果我输入一个特定的值,那么一切正常,但如果我不这样做,我会发现“发生数据库错误” " 1062 错误(键“key”的重复条目“text”)。我做错了事。

在这里我将解释我的代码。在那之前,我已经读过,为了使用id_unique[tablename.tablefield],您必须首先为该特定字段设置一个唯一的ID,这就是我所做的。

您能更好地向我解释发生了什么吗?

这是模型中的函数:

function save_users() {

    $username = $_POST['username'];
    $password = $_POST['password'];
    $email = $_POST['email'];

    $sql = $this->db->query("INSERT INTO users (username, password, email) VALUES ('".$username."', '".$password."', '".$email."') ");
}

这里是控制器:

public function index() {
    $this->load->helper(array('form', 'url'));

    $this->load->library('form_validation');

        $this->form_validation->set_rules("username","username","trim|required|xss_clean|callback_username_check");
    $this->form_validation->set_rules("password","password","trim|required|md5");
          $this->form_validation->set_rules("email","email","trim|required|valid_email|is_unique[users.email]");

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('myform');
    }
    else
    {
        $this->load->view('formsuccess');
    }
}

public function username_check($str) {

    if ($str != "admin") {

        $this->load->model("new_model");            

        $this->form_validation->set_message("username_check", "The %s field cannot have username Test ");
        $this->form_validation->set_message("is_unique[users.email]","Errore!");

        $this->new_model->save_users();

        return FALSE;
    } else {
        return TRUE;
    }
}

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    我不能 100% 确定您需要什么,但我会对您的代码进行一些更改。 比如回调。我认为您不应该从回调函数将用户添加到数据库中。

    这应该在表单验证通过后完成。

    我会把你的控制器改成这个;

    public function index()
    {
      $this->load->helper(array('form', 'url'));
      $this->load->library('form_validation');
      $this->load->model('new_model');
    
      $this->form_validation->set_rules('username' 'Username', 'trim|required|xss_clean|callback_username_check');
      $this->form_validation->set_rules('password' 'Password', 'trim|required|md5');
      $this->form_validation->set_rules('email' 'Email Address', 'trim|required|xss_clean|valid_email|is_unique[users.email]');
    
      if (!$this->form_validation->run())
      {
        $this->load->view('myform');
      }
      else
      {
        // Now we add the entry to the database
        if ($this->new_model->save_user())
        {
          echo 'user added!';
        }
        else
        {
          echo 'error within model';
        }
      }
    }
    
    
    public function username_check($username)
    {
      if ($username == 'admin')
      {
        $this->form_validation->set_message('username_check', 'The %s cannot be "admin"');
        return false;
      }
      else
      {
        return true;
      }
    }
    

    我所做的是从回调函数中删除数据库条目,并将其移动到索引函数中,一旦表单验证通过,它将运行。

    这能解决您的问题吗?

    现在运行这个函数,会说“模型中的错误”,这是因为你的模型没有返回任何东西给控制器。修改你的 save_user 函数,到这个;

    function save_users()
    {
        $username = $_POST['username'];
        $password = $_POST['password'];
        $email = $_POST['email'];
        $sql = $this->db->query("INSERT INTO users (username, password, email) VALUES ('".$username."', '".$password."', '".$email."') ");
        return ($this->db->affected_rows() > 0) ? true : false;
    }
    

    【讨论】:

    • 好吧,只有一个问题:为什么说:if / else 构造“if ($this->new_model->save_users())”?对不起,但这并不意味着“如果函数被执行”?但是你在哪里执行呢?我对OOP逻辑有点不熟悉,我需要学习更多。第二个是:好的,逻辑正在运行,但是如果(我之前谈到过),如果我按照上面写的方式运行,即使查询正在做正确的事情,也会抛出“模型中的错误” (找到?不插入,未找到,插入)
    • 这并不意味着函数是否被执行,它意味着函数是否返回true或false。我将使用新的模型函数修改我的答案。
    • 啊啊好吧...我现在明白了。感谢您的详细解释,之前从未使用过此条件
    • 不客气。我已经使用 CI 几年了,每当我遇到问题时,我仍然会阅读 user_guide。十分之九,它会被覆盖在那里。 ellislab.com/codeigniter/user-guide
    猜你喜欢
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2016-08-30
    • 2017-07-31
    • 2014-05-17
    • 2018-04-15
    • 2017-01-10
    相关资源
    最近更新 更多