Nous allons voir un exemple de transaction SQL avec Zend Framework.
Une transaction SQL est utile lorsque vous voulez vous assurer que plusieurs requêtes se déroulent normalement.
Dans l’exemple ci-dessous, nous voulons enregistrer un utilisateur et son message.
On ne veut pas que l’utilisateur soit enregistré s’il y a un problème à l’insertion du message.
$tableUtilisateur = new Table_Utilisateur();
$tableCommentaire = new Table_Commentaire();
// démarre la transaction
$tableUtilisateur->getAdapter()->beginTransaction();
try {
// execute les requêtes
$idUtilisateur = $tableUtilisateur->save(array(
'prenom' => 'John',
'nom' => 'Doe'
));
$tableCommentaire->save(array(
'idUtilisateur' => $idUtilisateur,
'contenu' => 'contenu du commentaire'
));
// valide tous les changements
$tableUtilisateur->getAdapter()->commit();
} catch (Exception $e) {
// annule tous les changements si une erreur est levée
$tableUtilisateur->getAdapter()->rollback();
// affiche le message d'erreur
die($e->getMessage());
}
De cette façon, nous nous assurons que : soit tout s’est bien déroulé, soit il y a une erreur et rien n’est enregistré.