什么是处理数据库的正确方法?
问题描述:
下面的代码只会在控制器中添加额外语句时删除数据。这是为什么?什么是处理数据库的正确方法?
我现在只使用codeigniter几个月了,而且我一直陷入这样的怪异错误。
这是模型文件:
My_model.php
function delete_data($where=array())
{
return $this->db->delete('table1', $where);
}
和控制器代码:
tasks.php
function do_delete_data()
{
$this->load->model('My_model');
$result = array('status' => '', 'message' => '');
try
{
$this->db->trans_begin();
$id = $this->input->post('post_id', TRUE);
if (! $this->My_model->delete_data(array('id' => $id)))
{
throw new Exception('Database process failed.');
}
$result['message'] = $this->db->last_query(); // extra statement
$this->db->trans_commit();
$result['status'] = 1;
}
catch(Exception $e)
{
$this->db->trans_rollback();
$result['message'] = $e->getMessage();
}
if ($this->input->is_ajax_request())
{
echo json_encode($result);
}
}
它正常工作,直到最近,我试图通过AJAX调用这个函数是这样的:
Display.php的
$.ajax({
url: '/tasks/do_delete_data',
type: 'post',
data: {
'post_id' : $('#post_id').val(), // e.g. 12
},
dataType: 'json',
success: function(response) {
alert('File deleted successfully.');
console.log(response);
},
error: function(e) {
alert('an error occurred.');
}
});
答
您正在使用id
在阿贾克斯PARAM但使用post_id
在你的控制器,这是不确定的指数。
您需要更正索引名称为:
$id = $this->input->post('id', TRUE); // use id
这是更好地利用print_r($_POST)
检查你在控制器得到这个你会明白,什么类型的数组,您在阿贾克斯的数据获取。
你需要使用'$ id'和'$ _POST' – devpro
@devpro对不起,我从内存中写入这个问题,并且在检查代码后是错误的..我编辑了代码。请看看 – dapidmini
是的,你在这里使用错误的索引名称'$ id = $ this-> input-> post('post_id',TRUE);'this should be'$ id = $ this-> input-> post '$ id',TRUE);' – devpro