三叔2017-06-07 09:25:24
看你try catch是否有對資料庫進行操作,當然涉及對多表更新插入,為了確保資料的完整性,必須開啟事務操作
//開啟事務
try {
//完成提交事務
} catch(throw $e) {
//rollback
}
给我你的怀抱2017-06-07 09:25:24
取決於你的catch裡面是什麼,如果try後面就一句,拋異常了,就沒有commit,OK。
如果doOne執行了,你沒有用事務,他autocommit了。你再catch要把doOne的單獨回滾還是怎麼辦?
下面是兩句,如果你有10句打算怎麼catch?
try {
doOne
doTwo
} catch(throw $e) {
//rollback
}
天蓬老师2017-06-07 09:25:24
事務和try catch
是兩個東西,之所以在啟動事務的時候使用try catch
是因為如果在使用pdo
mysqli
這類的擴展的時候,數據庫報錯會給php 返回一個錯誤,讓php 執行的程式終止,從而不能執行到rollback
這一步的函數命令(在執行錄入的時候程序就中斷了),而使用try catch
再執行事務操作的時候就安全許多
要分清楚try catch
是屬於php
java
這類的邏輯操作的東西,而transation
是屬於資料庫的東西,兩者可以配合但是不能替代