2011-07-29 40 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); 

乾杯