2017-02-09 80 views
2

我想學習如何使用MYSQL TRANSACTIONS如何使用codeigniter中的事務進行基於數據更改的提交和回滾?

我有用例,我有兩個表。比方說表1和表2。現在我在表1中插入一些數據,並從表中得到insert id我想將其插入到表2中。

如果在Table1中成功插入值,並且在插入Table2值時發生任何錯誤,我希望因爲我的Table2的查詢不成功,所以也要刪除Table1中的值。

我只是想了解如何使用Codeigniter來完成這項工作。 如何根據需要COMMIT或ROLLBACK。

請幫我看一些示例代碼來理解。

更新

我還提到了笨UserGuide。但我並沒有明白Running Transactions manually這個概念是什麼意思?正如上面提到的,我想做一些類似觸發器的事情,這是自動的,我的意思是如果我的查詢失敗了,我希望它使用Codeigniter進行ROLLBACK。

代碼:

$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(); 
    } 
在這種情況下

現在我試着這樣做:

本聲明基於前面save()方法$this->Product_m->create_product($pid,$num_of_license);插入數據,現在假設一些錯誤create_product期間發生()方法。然後我想回滾。我想刪除save()方法所做的記錄。

+0

可能的複製(HTTP://計算器。com/questions/15224826/codeigniter-transactions) –

+2

這不是重複他只是要求在codeigniter – Vimal

+0

@dhruvjadia做的交易的參考那個問題,我已經提到,但它是專門關於他的代碼,我只是想了解我是如何可以以不同的方式使用它,另外我提到我想「學習」 – Rajan

回答

8

使用以下步驟。

1.使用$this->db->trans_begin();開始您的交易。

2.執行查詢。

3.使用$this->db->trans_status()檢查交易狀態。

4.如果status是真的commit使用$this->db->trans_commit();交易。

5.如果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(); 
} 

更多見文檔Codeigniter Transaction的[笨交易]

+0

你能解釋我與這個用例場景,我插入一個記錄和基於該記錄插入另一個記錄,但同時插入我的第二個記錄在第二個表如果發生錯誤,我想刪除我插入的第一條記錄 – Rajan

+0

請問$ this-> db-> trans_rollback();刪除此交易下的所有記錄? – Rajan

+0

yea ..所有在'trans_begin'之後執行的查詢都將被回退。你有沒有按照上述步驟嘗試任何東西。 –

相關問題