2011-07-29 4 views
0

J'ai une classe qui gère l'enregistrement des utilisateurs. Il y a deux étapes principales: insérer des utilisateurs dans une table mysql, puis envoyer un e-mail de confirmation si l'insertion réussit.Requêtes Caching/Tables temporaires pour PHP et MySQL

Est-il possible que je peux ... Je ne sais pas ... sortez du cache la première étape pour que les données ne soient pas insérées si la fonction qui gère l'envoi du message échoue?

Je peux vérifier si sendmail est activé sur le serveur, et si ce n'est pas le cas, ne pas même effectuer la requête. Je pense que cela fonctionnerait la plupart du temps, mais je veux aussi attraper les moments où sendmail est activé, mais il y a juste une erreur avec l'envoi de l'e-mail.

Je pensais à insérer toutes les données dans une table temporaire, et si l'envoi de courrier réussit à copier la ligne dans la table permanente. Le problème avec ceci est que j'appelle une procédure stockée pour insérer des données, et le truc de courrier se passe dans le code d'application, donc dès que l'insertion est faite, une table de temp serait autodelete (est-ce correct?).

+0

Je ne pense pas que vous ayez vraiment ce problème à résoudre. Si vous avez déjà vérifié que sendmail fonctionne, l'appel 'mail' ne peut pas échouer. Si le courrier ne peut pas être livré, ou rebondit, ou l'adresse ne pointe pas vers un serveur réel, ou quoi que ce soit de ce genre ... l'appel mail sera toujours couronné de succès, seul le serveur mail connaît ces choses, pas PHP . –

+0

Si vous voulez toujours faire quelque chose ici, vous le rendez trop compliqué. 'if (! mail (quelquechose)) mysql_query (" DELETE FROM table WHERE id = LAST_INSERT_ID() ");' ... ou utilise les transactions et la restauration au lieu de commettre à ce stade. –

Répondre

0

Personnellement, je n'envoie pas d'e-mails depuis l'application. Au lieu de cela, je stocke les informations de messagerie dans une table, utiliser un travail cron pour envoyer les e-mails de la table de cette façon, je peux prendre des mesures appropriées.

0

Soit utiliser la solution de Dan « LAST_INSERT_ID() » ou si vous insérez d'abord tous les utilisateurs et l'envoi de l'e-mail plus tard en cache simplement l'ID à son e-mail de l'utilisateur correspondant afin de supprimer l'utilisateur par sa référence:

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

Salutations