Vâng, cách tiếp cận của bạn là đúng. Sử dụng Try...catch
có thể dẫn đến mã sạch hơn và dễ đọc hơn trong một số trường hợp nhưng cách tiếp cận tổng thể của bạn vẫn ổn.
Nếu đoạn mã của bạn là từ một hàm xử lý các truy vấn DB chứ không phải hàm khác, có lẽ tôi sẽ chuyển đổi cách tiếp cận:
// 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();
Tất nhiên, nếu bạn yêu cầu phải dọn dẹp nhiều trước khi có thể return
, thì cách tiếp cận ban đầu của bạn sẽ tốt hơn. Đặc biệt trong những trường hợp này, tôi sẽ xem xét sử dụng PDO ::ERRMODE_EXCEPTION. Điều này có một số lợi ích bổ sung, chẳng hạn như các trường hợp ngoại lệ tự động quay trở lại giao dịch trừ khi chúng bị bắt.