Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database codeIgniter中的事务相关问题_Database_Codeigniter_Transactions - Fatal编程技术网

Database codeIgniter中的事务相关问题

Database codeIgniter中的事务相关问题,database,codeigniter,transactions,Database,Codeigniter,Transactions,我有一个表temp_users,用于在激活帐户之前保存用户输入的数据。 注册验证成功后,将生成一个随机数,并向用户发送一封带有该数字的电子邮件,同时将输入数据与该随机数一起添加到临时用户。 当用户单击其电子邮件中的激活链接时,controller中的一个新函数将启动,如果该函数成功运行,则所有用户的输入数据都将发送到perm_users表,temp_users的数据将被删除。 我使用的是一个模型用户 问题1 if($this->model_users->add_temp_users(

我有一个表temp_users,用于在激活帐户之前保存用户输入的数据。 注册验证成功后,将生成一个随机数,并向用户发送一封带有该数字的电子邮件,同时将输入数据与该随机数一起添加到临时用户。 当用户单击其电子邮件中的激活链接时,controller中的一个新函数将启动,如果该函数成功运行,则所有用户的输入数据都将发送到perm_users表,temp_users的数据将被删除。 我使用的是一个模型用户

问题1

if($this->model_users->add_temp_users($email_key)){                  
     if ($this->email->send()) {
       echo "An email has been sent to you. Click the link to activate your account.";
       } else {
       $this->model_users->delete_temp_users($email_key); 
        echo 'Some error occured, try again later.';
      }


     }else{

        echo "Some error occured, try again later.";
      }
在这里,如果电子邮件发送失败,我尝试断开临时用户中的internet数据连接,则会发生锁定时间过期的错误

问题2

if($this->email->send()){

    if ($this->model_users->add_temp_users($email_key)) {
      echo "An email has been sent to you. Click the link to activate your account.";
     }else {
      echo 'Some error occured, try again later.';
     }

  }else{

   echo 'Some error occured, Try again later.';
  }
如果我使用这种逻辑,如果数据库查询失败,电子邮件仍在发送

问题3

$this->db->trans_start();
$this->email->send();
$this->model_users->add_temp_users($email_key);
$this->db->trans_complete();

if($this->db->trans_status() == FALSE){
 echo "Some error occured, try again later.";
}else{
 echo "An email has been sent to you. Click the link to activate your account.";
}
这里没有发生回滚


如何正确运行此逻辑?

wow仍然没有答案?通常情况下,我会立即从乐于助人和友善的社区得到答案。你能不使用事务完成同样的事情吗?问题1和问题2没有事务。在问题3中,我尝试使用事务,但很可能它不起作用,因为$this->email->send不是一个数据库查询,如果email已经发送,我们就不能真正回滚它。好的,我现在更清楚了。所以我想说,在发送电子邮件和用一些信息更新数据库表之间,发送电子邮件更容易出错。但更大的错误将是人们输入错误的电子邮件地址!因此,我建议,无论你给用户发送什么消息,都要像我们发送电子邮件一样回显电子邮件地址name@domain.com. 这样,如果他们的电子邮件地址出现错误,您就给了他们一个纠正错误的机会。如果这对您的应用程序至关重要,那么建议使用codeigniter日志记录,这样您就有了错误记录