首页 > 解决方案 > Codeigniter 和 AJAX MySQL 错误处理

问题描述

我是(新手)使用 CI3 并创建了一个简单的表单,它将单个值 ( age) 插入 MySQL 数据库 ( test) 表中。我在表单中没有任何前端验证,我正在尝试服务器端验证。

age列在数据库中具有以下属性;

每当我在表单输入中输入一个非数字值age(例如“john”)时,表单都会成功提交,但数据库将此值保存为0. 这是预期的行为吗?

似乎我可以在数据库中输入一个非整数,尽管它被设置为 datatype int

我本来预计会引发以下错误;

/* SQL 错误 (1054): 'where 子句' 中的未知列 'john' */

每当我尝试手动插入非 int 值(通过 heidisql / phpmyadmin)时,都会出现此错误(如预期的那样)。

那么,如何在我的应用程序中检查此错误并采取相应措施?

我的代码如下;

模型

public function insert_form_data(){
    $data = array(
        'age'  => $this->input->post('age')
    );
    $result = $this->db->insert('test', $data);
    if ($this->db->affected_rows() > 0) {
        return TRUE;
    }
    else {
        return $this->db->error(); 
    }
}

控制器

public function insert_form_data(){
    $data = $this->Form_model->insert_form_data();
    echo json_encode($data);
}

看法

<form name="myform" id="myform">
    <input name="age" type="text">
    <button type="submit" id="submit">Submit</button>
</form>
<p id="message"></p>


$(document).ready(function() {
    $('#submit').on('click', function(event) {
        event.preventDefault();
        $.ajax({
            url: "form/insert_form_data",
            method: "post",
            data: $("#myform").serialize(),
            dataType: 'json',
            success: function(response) {
                if (response == true) {
                    $('#message').text('Form submitted!');
                }
            },
            error: function(response) {}
        });
        return false;
    });
});

标签: phpmysqlajaxcodeignitererror-handling

解决方案


我不确定你为什么要依赖 sql 错误,而你在 codeigniter 的验证库中拥有你可能需要的一切,以便在插入之前进行检查,如下所示:

public function insert_form_data()
{
    $this->load->library('form_validation');
    $this->form_validation->set_rules('age', 'Age', 'required|integer');
    if ($this->form_validation->run() == FALSE)
    {
        $data['validation'] = validation_errors();
    }
    else
    {
        $data['validation'] = "Success";
    }
    $data["result"] = $this->Form_model->insert_form_data();
    echo json_encode($data);
}

推荐阅读