-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;
          }
      }
 }  
4

1 回答 1

0

您似乎在描述atomicity。如果其中一个插入失败,则不应允许任何一个插入完成。我不熟悉 codeignighter 的 db 层。如果插入方法失败,您应该检查它是否会自动发出回滚。如果不是,那么您将需要在您的 save_user 方法中检查这些条件,并且 1)在那里发出回滚或 2)返回 false 并从调用代码处理回滚。此外,请查阅 db insert 方法的文档以查看它返回的内容或是否引发任何异常。这可能比调用affected_rows 更容易检测插入失败。

于 2012-12-02T19:27:57.023 回答