进行数据库操作并向电子邮件发送事务

eme*_*ieu 0 php mysql email

我有一个预订酒店的网站.预订成功后,将发送一封电子邮件给客户.我做了如下:

- Update table "booking"
- Check the result
   + If true, send email
   + Else return error
Run Code Online (Sandbox Code Playgroud)

但如果没有发送电子邮件怎么办?已插入数据库但未发送电子邮件.这使得预订操作不对.如何进行数据库操作和发送电子邮件交易?有没有简单的方法呢?A和B必须成功或不成功.

Eug*_*eck 5

严格意义上的交易不能在数据库内部扩展,也不能在数据库外部扩展.所以我们必须重新定义"交易",要么所有行动都失败,要么全部成功.

这是一个想法:

  • 启动数据库事务
    • 更新表"预订"
    • 将撤消记录写入表中,状态为"已更新,未发送".这需要一些ID,可用于撤销预订
  • 提交数据库事务
  • 如果失败,请纾困(无需回滚)

  • 发送电子邮件

  • 如果这样就行了
    • 删除撤消记录
    • 回归"成功"
  • 其他
    • 使用undo record撤消预订
    • 删除撤消记录
    • 返回"错误"

有两点需要了解:

  • 在操作系统崩溃,电源输出等情况下,您必须手动检查撤消表并将其与邮件服务器日志进行比较:崩溃可能发生在邮件失败或邮件刚刚发送但未记录的情况下
  • 最重要的是:我还没有看到一个快速的机制,可靠地告诉我们是否发送了电子邮件.我的意思是真的发送,而不是在某处