Nếu bạn không commit
không phải rollback
một giao dịch đã mở và nó không được commit
ở bất kỳ nơi nào sau này trong tập lệnh của bạn, nó sẽ không được commited
(như được nhìn thấy bởi công cụ cơ sở dữ liệu) và sẽ tự động quay lại ở cuối tập lệnh của bạn.
Tuy nhiên, tôi (tốt, gần như) luôn luôn commit
hoặc rollback
rõ ràng các giao dịch tôi mở, vì vậy:
- Không có rủi ro xảy ra lỗi (như xác nhận "do nhầm lẫn" ở phần sau của tập lệnh)
- Mã dễ đọc / hiểu hơn :khi một người nhìn thấy
$db->rollback()
, anh ấy biết chắc chắn tôi muốn giao dịch được khôi phục và anh ấy không phải nghĩ " anh ấy thực sự muốn khôi phục hay anh ấy đã quên điều gì đó? Và sau này trong kịch bản thì sao? "
Công cụ DB không "nhìn thấy" PDOException:nó được PHP ném vào trong các điều kiện khác nhau - nhưng cơ sở dữ liệu không tự phục hồi bất cứ thứ gì:
- hoặc một giao dịch được cam kết
- hoặc nó được khôi phục lại
- hoặc nó không được cam kết rõ ràng cũng như không được hoàn nguyên - có nghĩa là nó không được cam kết - có nghĩa là những gì đã được sửa đổi không được sửa đổi "thực sự"