重构保存用户功能

时间:2012-12-02 18:49:57

标签: php codeigniter

我正在试图找出在处理创建用户时会发生什么情况的最佳路径,但第二次插入没有成功运行。有什么可能性?

 /**
  * 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 个答案:

答案 0 :(得分:0)

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