Sim, sua abordagem está correta. Usando
Try...catch
pode levar a um código mais limpo e legível em alguns casos, mas sua abordagem geral é boa. Se o seu fragmento de código for de uma função que lida com consultas de banco de dados e não muito mais, eu provavelmente mudaria a abordagem:
// 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();
Claro, se você precisar fazer muita limpeza antes de poder
return
, então sua abordagem original é melhor. Especialmente nesses casos, eu gostaria de usar PDO::ERRMODE_EXCEPTION. Isso tem alguns benefícios adicionais, como exceções que revertem automaticamente a transação, a menos que sejam capturadas.