2012-12-02 23 views
-1

我想弄清楚如果創建用戶會發生什麼,但是第二次插入沒有成功運行會發生什麼情況下最好的路線。有什麼可能性?重構保存用戶函數

/** 
    * save_user function. 
    * 
    * @access public 
    * @param string $user_name 
    * @param string $user_directory_name 
    * @param integer $user_status_id 
    * 
    * @return TRUE/FALSE 
    */ 
    public function save_user($user_name, $user_directory_name, $user_status_id) 
    { 
     $data = array(
     'user_name' => $user_name, 
     'user_directory_name' => $user_directory_name, 
     'user_status_id' => $user_status_id 
    ); 

     $this->db->insert('users', $data); 

     if ($this->db->affected_rows() == 1) 
     { 
      $data = array(
       'user_id' => $this->db->insert_id() 
     ); 

      $this->db->insert('user_profiles', $data); 

      if ($this->db->affected_rows() == 1) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
} 
+1

第二次插入失敗的原因是什麼(當然編碼錯誤除外)?如果發生故障,您可以刪除插入的上一行。或者如果你的數據庫服務器支持它,你可以查看「事務」。這將允許您執行兩個插入,但只有在兩個都成功時纔將它們「提交」到數據庫。 – koopajah

+0

這正是我所需要的。謝謝。 –

回答

0

您似乎在描述atomicity。如果其中一個插入失敗,則不應允許完成。我不熟悉codeignighter的db層。如果插入方法失敗,您應該檢查它是否會自動發出回滾。如果沒有,那麼您需要檢查save_user方法中的這些條件,並且1)在那裏發出回滾或2)返回false並處理調用代碼中的回滾。此外,請查閱db插入方法的文檔以查看它返回的內容或是否拋出任何異常。這可能會使檢測插入失敗比調用affected_rows更容易。