-1

ユーザーが作成されたが、2番目の挿入が正常に実行されない場合に何が起こるかという状況を処理するための最良のルートは何かを理解しようとしています。いくつかの可能性は何ですか?

 /**
  * 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

あなたは原子性を説明しているようです。挿入の 1 つが失敗した場合、どちらも完了できません。私は codeignighter の db レイヤーに慣れていません。挿入メソッドが失敗した場合にロールバックが自動的に発行されるかどうかを確認する必要があります。そうでない場合は、save_user メソッド内でこれらの条件を確認し、1) そこでロールバックを発行するか、2) false を返し、呼び出し元のコードからロールバックを処理する必要があります。また、db insert メソッドのドキュメントを参照して、返される内容や例外がスローされるかどうかを確認してください。これにより、insert_rows を呼び出すよりも挿入エラーの検出がはるかに簡単になる場合があります。

于 2012-12-02T19:27:57.023 に答える