Re: [OT?] [PHP-PDO-CLASS] controllo incrociato tra due funzioni
On 09/08/18 15:30, Giuseppe Naponiello wrote:
> Salvati i dati nel db, utilizzo phpMailer per inviare all'utente la
> password generata automaticamente dal sistema.
> Allo stato attuale ho 4 possibili risultati:
> 1. entrambe le operazioni vanno a buon fine: dati salvati, mail spedita
> 2. nessuna delle operazioni va a buon fine: errore nella transazione dei
> dati, errore nell'invio della mail
> 3. l'utente viene creato ma la mail non viene spedita
> 4. la mail viene spedita ma l'utente non viene creato
>
> Esiste un modo per evitare i punti 3 e 4? Cioé, se c'è un errore
> nell'invio della mail non salvare i dati nel db, oppure se c'è un errore
> nella query non inviare la mail.
Per prima cosa: non hai modo di sapere se ci sono stati errori
nell'invio della mail. L'unica cosa che puoi controllare (parzialmente)
è che il server SMTP che hai impostato per spedire mail non torni un errore.
In questo caso, e solo in questo caso, puoi provare con:
if (false === $pdo->beginTransaction()) {
exit;
}
$res1 = $pdo->exec('insert into rubrica...');
$res2 = $pdo->exec('insert into utenti...');
$mailres = false;
if ($res1 > 0 && $res2 > 0) {
$mailres = mail(...);
}
if ($mailres === false) {
$pdo->rollBack());
} else {
$pdo->commit();
}
Bye.
Reply to: