什么是处理数据库的正确方法?

问题描述:

下面的代码只会在控制器中添加额外语句时删除数据。这是为什么?什么是处理数据库的正确方法?

我现在只使用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.'); 
    } 
}); 
+0

你需要使用'$ id'和'$ _POST' – devpro

+0

@devpro对不起,我从内存中写入这个问题,并且在检查代码后是错误的..我编辑了代码。请看看 – dapidmini

+0

是的,你在这里使用错误的索引名称'$ id = $ this-> input-> post('post_id',TRUE);'this should be'$ id = $ this-> input-> post '$ id',TRUE);' – devpro

您正在使用id在阿贾克斯PARAM但使用post_id在你的控制器,这是不确定的指数。

您需要更正索引名称为:

$id = $this->input->post('id', TRUE); // use id 

这是更好地利用print_r($_POST)检查你在控制器得到这个你会明白,什么类型的数组,您在阿贾克斯的数据获取。