2017-02-09 7 views
2

Я хочу узнать, как я мог бы использовать MYSQL ОПЕРАЦИИ.Как использовать транзакции в codeigniter для фиксации и отката на основе изменения данных?

У меня есть прецедент, где у меня есть две таблицы. Скажем, Table1 и Table2. Теперь я вставляю некоторые данные в Таблицу 1 и insert id. Я получаю из этой таблицы. Я хочу вставить ее в таблицу 2.

Если значения успешно вставлены в Таблицу 1 и во время ввода значений Таблицы 2, если возникла какая-либо ошибка, я хочу также удалите значения из таблицы 1, так как запрос для моей таблицы 2 не был успешным.

Я просто хочу понять, как это можно сделать с помощью Codeigniter. Как COMMIT или ROLLBACK в соответствии с потребностями.

Пожалуйста, помогите мне с примером кода для понимания.

Update

Я также передал CodeIgniter UserGuide. Но я не понял понятия Running Transactions manually Что это значит? Как упоминалось выше, я хочу сделать что-то вроде триггера, который является автоматическим, я имею в виду, что если мой запрос завершится неудачно, я хочу, чтобы он выполнял ROLLBACK независимо от того, что он сделал, используя Codeigniter.

Код:

$this->db->trans_begin(); 
$data = $this->Product_m->array_from_post(array('name','description')); 
$this->Product_m->save($data,$id); 
$pid = $this->db->insert_id(); 

$num_of_license = $_POST['license']; 

$this->Product_m->create_product($pid,$num_of_license); 
    if ($this->db->trans_status() === FALSE) 
    { 
      $this->db->trans_rollback(); 
    } 
    else 
    { 
      $this->db->trans_commit(); 
    } 

Теперь в этом случае я попытался сделать это:

Данное Заявление $this->Product_m->create_product($pid,$num_of_license); вставляет данные на основе метода предыдущего сохранения() Теперь предположим, что некоторые ошибки происходит во время create_product() метод , Затем я хочу откат. Я хочу удалить запись, которую сделал метод save().

+0

Возможные дубликата [CodeIgniter Сделки] (HTTP: // StackOverflow.com/questions/15224826/codeigniter-transaction) –

+2

Это не дубликат, он просто попросил ссылку на транзакцию, выполненную в codeigniter – Vimal

+0

@dhruvjadia, этот вопрос, о котором я уже говорил, но это касается его кода, я просто хотел понять, как я мог бы использовать его по-разному. Также я упомянул, что хочу «Учиться» – Rajan

ответ

8

Используйте следующие шаги.

1. Заблокируйте вашу транзакцию, используя $this->db->trans_begin();.

2. Выполняет запросы.

3.Проверьте статус сделки с помощью $this->db->trans_status().

4.If status имеет значение commit сделка с использованием $this->db->trans_commit();.

5.If ​​status не соответствует действительности rollback сделка используя $this->db->trans_rollback();.

$this->db->trans_begin(); 

$this->db->query('AN SQL QUERY...'); 
$this->db->query('ANOTHER QUERY...'); 
$this->db->query('AND YET ANOTHER QUERY...'); 

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

подробнее см Docs Codeigniter Transaction

+0

Можете ли вы объяснить мне этот сценарий использования, когда я вставляю запись и на основе этой записи вставляю другую запись, но при вставке моей второй записи во вторую таблицу если ошибка возникает, я хочу удалить даже первую запись, которую я вставил – Rajan

+0

Будет ли $ this-> db-> trans_rollback(); удалить все записи по этой транзакции? – Rajan

+0

yea .. все запросы, выполненные после 'trans_begin', будут откатными. Вы пробовали что-либо в соответствии с вышеуказанными шагами. –