Tôi đang sử dụng thư viện mysqli của PHP. Chèn và cập nhật cơ sở dữ liệu luôn trong khối try-catch. Thành công của mỗi truy vấn được kiểm tra ngay lập tức (if $result === false
), và bất kỳ lỗi nào đều có ngoại lệ. Cuộc gọi bắt được mysqli_rollback()
và thoát với thông báo cho người dùng.Với PHP và MySQL, bạn có nên kiểm tra xem có lỗi rollback không?
Câu hỏi của tôi là, tôi có nên kiểm tra giá trị trả lại của mysqli_rollback()
không? Nếu vậy, và rollback không thành công, mã nào sẽ thực hiện hành động nào?
Tôi có một thời gian khó hiểu cách khôi phục có thể không thành công (chặn một số lỗi nghiêm trọng trong MySQL). Và kể từ khi PHP là sẽ thoát khỏi anyway, gọi rollback gần như có vẻ thừa. Tôi chắc chắn nghĩ rằng nó phải ở trong mã cho rõ ràng, nhưng khi PHP thoát nó sẽ đóng kết nối tới MySQL và các giao dịch không được cam kết sẽ được cuộn lại tự động.
Nếu bạn đang tìm kiếm một ví dụ cụ thể với xác suất thực tế- php của bạn có thể thực thi trên một máy khác với cơ sở dữ liệu chạy trên (ví dụ: máy chủ cơ sở dữ liệu riêng biệt). Mạng io có rất nhiều "công trình bây giờ nhưng không hoạt động trong các kịch bản" thứ hai tiếp theo. Tất nhiên nó có thể xảy ra với cả hai trên cùng một máy quá, ít nhiều khả năng. – goat
Thú vị! Có vẻ như các hàm ý là giống nhau trong kịch bản đó mặc dù: ngay cả khi cuộc gọi rollback không thành công, phiên làm việc MySQL của PHP sẽ kết thúc và việc khôi phục sẽ xảy ra. Vì vậy, có lẽ nó có giá trị đăng nhập lỗi như là một chỉ báo của vấn đề lớn hơn, nhưng bạn vẫn không phải lo lắng về tính toàn vẹn dữ liệu. – giskard22