Mysql
 sql >> Base de données >  >> RDS >> Mysql

PDO Requêtes multiples :validation et annulation de la transaction

Oui, votre approche est correcte. Utiliser Try...catch peut conduire à un code plus propre et plus lisible dans certains cas, mais votre approche globale est correcte.

Si votre fragment de code provient d'une fonction qui gère les requêtes DB et pas grand-chose d'autre, je changerais probablement l'approche :

// Begin Transaction
$this->db->beginTransaction();

// Fire Queries
if(!$query_one->execute()){
    $this->db->rollback();
    // other clean-up goes here
    return;
}

if(!$query_two->execute()){
    $this->db->rollback();
    // other clean-up goes here
    return; 
}

$this->db->commit();

Bien sûr, si vous avez besoin de beaucoup de nettoyage avant de pouvoir return , alors votre approche originale est meilleure. Surtout dans ces cas, j'envisagerais d'utiliser PDO::ERRMODE_EXCEPTION. Cela présente des avantages supplémentaires, comme les exceptions annulant automatiquement la transaction à moins qu'elles ne soient interceptées.