我正在试图找出在处理创建用户时会发生什么情况的最佳路径,但第二次插入没有成功运行。有什么可能性?
/**
* 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;
}
}
}
答案 0 :(得分:0)
您似乎在描述atomicity。如果其中一个插入失败,则不应该允许完成。我不熟悉codeignighter的db层。如果插入方法失败,您应该检查它是否会自动发出回滚。如果没有,那么你需要在save_user方法中检查这些条件,并且1)在那里发出回滚或者2)返回false并从调用代码处理回滚。另外,请参阅db insert方法的文档以查看它返回的内容或是否抛出任何异常。这可能比调用affected_rows更容易检测插入失败。