[英]PHP and PostgreSQL Transactions?
很久以前,我寫了一個處理postgresql db連接的php類。
我已將事務添加到插入/更新功能中,對我來說很好用。 但是最近我發現了有關“ pg_prepare”函數的信息。
我對該函數的功能以及是否最好切換到該函數感到困惑。
目前,每當我執行插入/更新操作時,我的sql如下所示:
$transactionSql = "PREPARE TRANSACTION ".md5(time()).";"
.$theUpdateOrDeleteSQL.";".
."COMMIT;";
This will return something like:
PREPARE TRANSACTION '4601a2e4b4aa2632167d3cc62b516e6d';
INSERT INTO users (username,g_id,email,password)
VALUES('test', '1', 'test','1234');
COMMIT;
我已經使用關系構建了數據庫,並且正在使用(如果可能):
ON DELETE CASCADE
ON UPDATE CASCADE
但是我想100%確保數據庫中的內容是干凈的,如果/在更新/刪除或插入時失敗,則不會有剩余。
如果您可以分享您對pg_prepare的意見/經驗,那會很好,我是否真的需要“准備交易”以及任何其他可能對我有幫助的事情? :)
不,您不需要兩階段提交!...
為了安全地處理PHP數據庫,請勿直接使用pg_query,而應將其包裝在執行以下操作的特殊函數中:
這樣,如果腳本崩潰或發生任何其他情況,則會自動發出回滾。 您只能通過顯式提交來提交。
如果您使用持久性連接,請當心:php對pg_pconnect的處理有點...越野車。
不,您不需要准備交易(這是針對跨不同服務器的分布式交易的-正如Milen所指出的那樣。
我不確定PHP接口如何處理該問題,但是只要您可以確保未在自動提交模式下運行,就可以了。
如果您無法控制自動提交模式,只需將您的語句放入BEGIN ... COMMIT塊中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.