多个表更新后如何重定向

时间:2015-05-22 11:24:30

标签: codeigniter

在我的控制器中同样像这样

public function update(){

$a= $this->input->post('a');
$b= $this->input->post('b');
$c= $this->input->post('c');
$d= $this->input->post('d');
$e= $this->input->post('e');
$f= $this->input->post('f');

$this->db->trans_begin();

$array1= array(
'field1'=>$a,
'field2'=>$b
);
$array2= array(
'field1'=>$c,
'field2'=>$d
);
$array3= array(
'field1'=>$e,
'field2'=>$f
);
$this->db->update('table1',$array1);
$this->db->update('table2',$array2);
$this->db->update('table3',$array3);

if ($this->db->trans_status() === FALSE)
{
    $this->db->trans_rollback();
}
else
{
    $this->db->trans_commit();
}

if($this->db->affected_rows() > 0){
redirect('controller/list');
}
else{
redirect('controller/update');
}

}

仅当table3的字段更新时,它才会重定向到(控制器/列表),但如果table3的字段保持不变而其他表更新则重定向到(控制器/更新)本身,

有人可以帮忙吗?在此先感谢...

2 个答案:

答案 0 :(得分:0)

添加一个变量来存储受影响的行,并在执行查询时对其进行更新。

public function update(){
    // add a variable for affected rows
    $affected_rows = 0;

    $a= $this->input->post('a');
    $b= $this->input->post('b');
    $c= $this->input->post('c');
    $d= $this->input->post('d');
    $e= $this->input->post('e');
    $f= $this->input->post('f');

    $this->db->trans_begin();

    $array1= array(
        'field1'=>$a,
        'field2'=>$b
    );
    $array2= array(
        'field1'=>$c,
        'field2'=>$d
    );
    $array3= array(
        'field1'=>$e,
        'field2'=>$f
    );

    $this->db->update('table1',$array1);
    // increment affected rows counter
    $affected_rows = $affected_rows + $this->db->affected_rows();

    $this->db->update('table2',$array2);
    // increment affected rows counter
    $affected_rows = $affected_rows + $this->db->affected_rows();

    $this->db->update('table3',$array3);
    // increment affected rows counter
    $affected_rows = $affected_rows + $this->db->affected_rows();

    if ($this->db->trans_status() === FALSE)
    {
        $this->db->trans_rollback();
    }
    else
    {
        $this->db->trans_commit();
    }

    if($affected_rows > 0){
        redirect('controller/list');
    }
    else{
        redirect('controller/update');
    }

}

答案 1 :(得分:0)

后来我尝试了这个

       if ($this->db->trans_status() === FALSE) 
        {
            $this->db->trans_rollback();
        } 
       else 
         {
           $this->db->trans_commit();
        }

        if ($this->db->trans_commit()) {

            redirect('controller/list');
        } else {
            redirect('controller/update');
        }