2011-07-29 15 views
0

我有一个类来处理用户注册。有两个主要步骤:将用户插入到mysql表中,然后在插入成功时发送确认电子邮件。缓存PHP和MySQL的查询/临时表

有没有什么办法可以......我不知道......如果处理发送电子邮件的函数失败,则缓存第一步的数据以便不插入数据?

我可以检查是否在服务器上启用了sendmail,如果没有,则甚至不执行查询。我认为这在大多数情况下都能正常工作,但我也希望赶上sendmail启用的时间,但发送电子邮件时出现一些错误。

我虽然将所有数据插入临时表,并且如果邮件发送成功复制到永久表中的行。问题在于我调用存储过程来插入数据,并且邮件内容在应用程序代码中发生,因此只要插入完成,临时表就会自动删除(是否正确?)。

+0

我不认为你真的有这个问题来解决。如果你已经检查过sendmail正在工作,那么'mail'调用就不会失败。如果邮件无法传递或反弹,或地址没有指向真实的服务器或类似的东西......邮件调用仍然会成功,只有邮件服务器知道这些事情,而不是PHP 。 –

+0

如果你仍然想在这里做点什么,你会让它过于复杂。 'if(!mail(whatever))mysql_query(“DELETE FROM table WHERE id = LAST_INSERT_ID()”);'...或者使用事务和回滚,而不是在此时提交。 –

回答

0

我个人不会从应用程序发送电子邮件。相反,我将电子邮件信息存储在表格中,使用cron作业从表格中发送电子邮件,以便采取适当的措施。

0

或者使用丹的解决方案“LAST_INSERT_ID()”,或在情况下,你先插入的所有用户发送了电子邮件后只需缓存ID到其对应的用户的电子邮件,以便通过其引用删除用户:

array('[email protected]' => 123); 

干杯