0

我是数据库事务的新手,我发现非常混乱。我有一个包含电子邮件地址、发送日期时间和发送日期时间的队列表。我的 cron 工作不断触发并选择现在已通过“发送日期时间”的行。它会向该地址发送一封电子邮件并更新“发送日期时间”列。

如果这个 cron 作业在完全相同的时间触发,它们就有可能抓取相同的行,从而发送两次电子邮件。

据我了解,交易都取决于成功或失败或查询。在这种情况下如何检查?

$this->db->trans_begin();

$query = $this->db->query('SELECT * FROM Queue_table where send >= now LIMIT 100');

foreach ($query->result() as $row)
{
   //code to send email to $row->email;
   $this->db->query('UPDATE Queue_table SET sent = now WHERE id = '$row->id'');
}

//the following doesn't make much sense to me. What would cause
// this to be false in this scenario?

if ($this->db->trans_status() === FALSE)
{
    $this->db->trans_rollback();
}
else
{
    $this->db->trans_commit();
}

我要这样做完全错误吗?

4

0 回答 0