2012-11-17 72 views
2

我目前正在遵循一個關於在PHP/MySQL中創建論壇的教程......並試圖將它實現到我的CodeIgniter項目中。CodeIgniter - 使用事務插入多個表

我遇到了一個麻煩,我從來沒有處理過交易...我已閱讀codeigniters交易的文檔,但即時通訊並不真正理解它考慮我需要轉換的代碼。

我想知道是否有人可以拿下面的代碼,並把它變成Codeigniters事務代碼對我來說,我已經嘗試過自己做,但它使用多個表,我只是完全困惑。

任何幫助將是巨大的,代碼如下:

$query = "BEGIN WORK;"; 
$result = mysql_query($query) 

if(!$result) { 
    echo 'An error has occured'; 
} else { 
    $sql = "INSERT INTO topics(t_subeject,date,cat) VALUES ($_POST['subject'],NOW(),$_POST['cat'])"; 
    $result = mysql_query($sql); 

    if(!$result) { 
     echo 'An error has occured'; 
     $sql = "ROLLBACK;"; 
     $result = mysql_query($query) 
    } else { 
     $topid = mysql_insery_id(); 
     $sql = "INSERT INTO posts(content, date) VALUES ($_POST['content'],NOW())"; 
     $result = mysql_query($sql); 

     if(!$result) { 
      echo 'An error has occured'; 
      $sql = "ROLLBACK;"; 
      $result = mysql_query($sql); 
     } else { 
      $sql = "COMMIT;"; 
      $result = mysql_query($sql); 
      echo 'Insert successful!'; 
     } 
    } 
} 

回答

2

如果INSERT失敗,它會自動做一個ROLLBACK。這就是您首先使用交易的原因。不需要明確檢查它。所以最終,這應該是所有這一切:

$this->db->trans_start(); 
$this->db->query("INSERT INTO topics(t_subeject,date,cat) VALUES ($_POST['subject'],NOW(),$_POST['cat'])"); 
$topid=$this->db->insert_id(); 
$this->db->query("INSERT INTO posts(content, date) VALUES ($_POST['content'],NOW())"); 
$this->db->trans_complete(); 

...從您的模型類。所以如果第一個INSERT失敗了,它將不會執行第二個。

http://ellislab.com/codeigniter/user_guide/database/transactions.html

+0

嘿,感謝這..這使事情變得更輕鬆,在第一次查詢後,我將如何去獲得mysql_insert_id,另外,如果第一個查詢失敗,將它仍然運行第二個? – BigJobbies

+0

編輯我的答案。 – DanMan

+0

Ahhh完美...非常感謝你! – BigJobbies