2011-07-29 26 views
0

私はユーザ登録を扱うクラスを持っています。主に2つのステップがあります:ユーザをmysqlテーブルに挿入し、挿入が成功した場合に確認メールを送信することです。PHPとMySQL用のクエリ/テンポラリテーブルのキャッシュ

私はできることはありますか...わかりません...電子メールの送信を処理する関数が失敗した場合、データが挿入されないようにキャッシュの一種ですか?

サーバー上でsendmailが有効になっているかどうかを確認し、そうでない場合はクエリを実行していないことも確認できます。私はそれがほとんどの場合はうまくいくと思うが、sendmailが有効になっている時間を捉えたいが、電子メールの送信に何らかのエラーがある。

私はすべてのデータを一時テーブルに挿入しますが、メールの送信が成功した場合は、そのテーブルを永久テーブルにコピーします。これの問題は、データを挿入するストアドプロシージャを呼び出していることです。メールの内容がアプリケーションコードで発生しているので、挿入が完了するとすぐに、テンポラリテーブルが自動修正されます(正しいのですか?)。

+0

私はあなたが実際にこの問題を解決するとは思わないです。すでにsendmailが動作していることを確認していれば、 'mail'呼び出しが失敗することはありません。メールが配信されない、またはバウンスされたり、アドレスが実際のサーバなどを指していない場合、メールの呼び出しは成功し、PHPではなくメールサーバだけが知っています。 –

+0

まだここで何かしたいのなら、あなたはそれを過度に複雑にしています。 'if(!mail(任意))mysql_query(" DELETE FROM table WHERE id = LAST_INSERT_ID() ");' ...またはこの時点でコミットの代わりにトランザクションとロールバックを使用します。 –

答えて

0

私は個人的にアプリケーションから電子メールを送信しません。代わりに、テーブルに電子メール情報を保存し、cronジョブを使用してテーブルから電子メールを送信して、適切な処置をとることができます。

0

どちらか後で簡単にその参照することにより、ユーザーを削除するために、それに対応するユーザーの電子メールにIDをキャッシュダンのソリューション「LAST_INSERT_ID()」を使用するか、場合、あなた最初のINSERT内のすべてのユーザーと電子メールを送信する:

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

乾杯お待ちください