2015-01-28 2 views
-1

Я пытаюсь обновить 3 таблицы с использованием транзакции, если какой-либо из них не удается. Мне нужно откат всех таблиц. Для одной таблицы ограничение внешнего ключа выходит из строя, но оно не возвращает ложную инструкцию, а указывает на ошибку консоли базы данных. Откат работает. Я включаю свой код ниже. Незлая помощь. Функция ниже помогает мне выполнять некоторые запросы транзакция не возвращается false msg

 
    function funcname($val1,$val2,$val3){ 
      $this->db->trans_start();//starting transaction 
      try { // trying to execute query 
       $this->db->query("UPDATE tab1 SET name = 1 WHERE id=".$val1); 
       $this->db->query("UPDATE school SET emp = 2 WHERE id=".$val2); 
       $this->db->query("UPDATE profile SET status = 4 WHERE id=".$val3); 
       $this->db->trans_complete(); 
       return TRUE; 
      } catch (Exception $ex) { //exception roll back to original state 
       $this->db->trans_rollback(); 
       return FALSE; 
      }
}

ответ

1

Если вы используете trans_start() и trans_complete() то вам не нужно использовать попытку поймать заявление. Ваша функция будет такой.

function funcname($val1,$val2,$val3){ 
     $this->db->trans_start();//starting transaction 
     $this->db->query("UPDATE tab1 SET name = 1 WHERE id=".$val1); 
     $this->db->query("UPDATE school SET emp = 2 WHERE id=".$val2); 
     $this->db->query("UPDATE profile SET status = 4 WHERE id=".$val3); 
     $this->db->trans_complete(); 
     if ($this->db->trans_status() === FALSE) 
     { 
      return FALSE; 
     } 
     else 
     { 
      return TRUE; 
     } 
    } 

В случае, если вам нужно сделать это вручную, то используйте код ниже

function funcname($val1,$val2,$val3){ 
     $this->db->trans_begin();//starting transaction 
     $this->db->query("UPDATE tab1 SET name = 1 WHERE id=".$val1); 
     $this->db->query("UPDATE school SET emp = 2 WHERE id=".$val2); 
     $this->db->query("UPDATE profile SET status = 4 WHERE id=".$val3); 
     if ($this->db->trans_status() === FALSE) 
     { 
      $this->db->trans_rollback(); 
      return FALSE; 
     } 
     else 
     { 
      $this->db->trans_commit(); 
      return TRUE; 
     } 
    } 

для получения дополнительной справки Transactions : CodeIgniter User Guide

+0

Благодарю вас за ответ, откат правильно работает для меня, но я не получаю retur n в контроллере. когда я проверяю консоль, там отображается ошибка консоли. – aish

+0

решены. Спасибо – aish

0

Я не знаю, как работает ваш класс дб, но, вероятно, запрос возврата false on fail not throw Exception, поэтому trans_complete() возвращает false тоже, а затем возвращаемая функция возвращает TRUE

Смежные вопросы