'《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9'

數據庫 MySQL SQL 兄弟連IT教育 2019-08-29
"

"

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

18.7 PDO的事務處理

事務是確保數據庫一致的機制,是一個或一系列的查詢,作為一個單元的一組有序的數據庫操作。如果組中的所有SQL語句都操作成功,則認為事務成功,那麼事務被提交,其修改將作用於所有其他數據庫進程。即使在事務的組中只有一個環節操作失敗,事務也不成功,整個事務將被回滾,該事務中的所有操作都將被取消。事務功能是企業級數據庫的一個重要組成部分,因為很多業務過程都包括多個步驟。如果任何一個步驟操作失敗,則所有步驟都不應發生。事務處理有4個重要特徵:原子性(Atomicity)、一致性(Consistency)、獨立性(Isolation)和持久性(Durability),即ACID。在一個事務中執行的任何工作,即使它是分階段執行的,也一定可以保證該工作會安全地應用於數據庫,並且在工作被提交時,不會受到其他連接的影響。

18.7.1 MySQL的事務處理

在MySQL 4.0及以上版本中均默認啟用事務,但MySQL目前只有InnoDB和BDB兩個數據表類型才支持事務,兩個表類型具有相同的特性,InnoDB表類型具有比BDB還豐富的特性,速度更快,因此,建議使用InnoDB表類型。創建InnoDB類型的表實際上與創建任何其他類型的表的過程類似,如果數據庫沒有設置默認的表類型,就需要在創建時顯式指定將表創建為InnoDB類型。創建InnoDB類型的僱員表employees,代碼如下所示:

CREATE TABLE employees(…) TYPE=InnoDB; //使用TYPE指定表類型為InnoDB

在默認情況下,MySQL是以自動提交(autocommit)模式運行的,這就意味著所執行的每條語句都會立即寫入數據庫。如果使用事務安全的表格類型,是不希望有自動提交的行為的。要在當前的會話中關閉自動提交,執行如下所示的MySQL命令:

MySQL> SET AUTOCOMMIT = 0; //在當前的會話中關閉自動提交

如果自動提交被打開了,必須使用如下語句開始一個事務;如果自動提交是關閉的,則不需要使用這條命令,因為當輸入一條SQL語句時,一個事務將自動啟動。

MySQL> START TRANSACTION; //開始一個事務

在完成了一組事務的語句輸入後,可以使用如下語句將其提交給數據庫。這樣,該事務才能在其他會話中被用戶看見。

MySQL> COMMIT; //提交一個事務給數據庫

如果改變主意,可以使用如下語句將數據庫回到以前的狀態。

MySQL> ROOLBACK; //事務將被回滾,所有操作都將被取消

並不是每種數據庫都支持事務,PDO只為能夠執行事務的數據庫提供事務支持。所以當第一次打開連接時,PDO需要在“自動提交(auto-commit)”模式下運行。如果需要一個事務,那麼必須使用PDO對象中的beginTransaction()方法來啟動一個事務。如果底層驅動程序不支持事務,那麼將會拋出一個PDOException異常。可以使用PDO對象中的commit()或rollback()方法來結束一個事務,這取決於事務中運行的代碼是否成功。

18.7.2 構建事務處理的應用程序

例如,一次在線購物的過程,選好一款產品,價格為80元,採用網上銀行轉賬方式付款。假設用戶userA向用戶userB的賬戶轉賬,需要從userA賬戶中減去80元,並向userB賬戶加上80元。首先,在demo數據庫中準備一張InnoDB類型的數據表(account),用於保存兩個用戶的賬戶信息,包括其姓名和可用現金數據,並向表中插入userA和userB的數據記錄,代碼如下所示:

"

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

18.7 PDO的事務處理

事務是確保數據庫一致的機制,是一個或一系列的查詢,作為一個單元的一組有序的數據庫操作。如果組中的所有SQL語句都操作成功,則認為事務成功,那麼事務被提交,其修改將作用於所有其他數據庫進程。即使在事務的組中只有一個環節操作失敗,事務也不成功,整個事務將被回滾,該事務中的所有操作都將被取消。事務功能是企業級數據庫的一個重要組成部分,因為很多業務過程都包括多個步驟。如果任何一個步驟操作失敗,則所有步驟都不應發生。事務處理有4個重要特徵:原子性(Atomicity)、一致性(Consistency)、獨立性(Isolation)和持久性(Durability),即ACID。在一個事務中執行的任何工作,即使它是分階段執行的,也一定可以保證該工作會安全地應用於數據庫,並且在工作被提交時,不會受到其他連接的影響。

18.7.1 MySQL的事務處理

在MySQL 4.0及以上版本中均默認啟用事務,但MySQL目前只有InnoDB和BDB兩個數據表類型才支持事務,兩個表類型具有相同的特性,InnoDB表類型具有比BDB還豐富的特性,速度更快,因此,建議使用InnoDB表類型。創建InnoDB類型的表實際上與創建任何其他類型的表的過程類似,如果數據庫沒有設置默認的表類型,就需要在創建時顯式指定將表創建為InnoDB類型。創建InnoDB類型的僱員表employees,代碼如下所示:

CREATE TABLE employees(…) TYPE=InnoDB; //使用TYPE指定表類型為InnoDB

在默認情況下,MySQL是以自動提交(autocommit)模式運行的,這就意味著所執行的每條語句都會立即寫入數據庫。如果使用事務安全的表格類型,是不希望有自動提交的行為的。要在當前的會話中關閉自動提交,執行如下所示的MySQL命令:

MySQL> SET AUTOCOMMIT = 0; //在當前的會話中關閉自動提交

如果自動提交被打開了,必須使用如下語句開始一個事務;如果自動提交是關閉的,則不需要使用這條命令,因為當輸入一條SQL語句時,一個事務將自動啟動。

MySQL> START TRANSACTION; //開始一個事務

在完成了一組事務的語句輸入後,可以使用如下語句將其提交給數據庫。這樣,該事務才能在其他會話中被用戶看見。

MySQL> COMMIT; //提交一個事務給數據庫

如果改變主意,可以使用如下語句將數據庫回到以前的狀態。

MySQL> ROOLBACK; //事務將被回滾,所有操作都將被取消

並不是每種數據庫都支持事務,PDO只為能夠執行事務的數據庫提供事務支持。所以當第一次打開連接時,PDO需要在“自動提交(auto-commit)”模式下運行。如果需要一個事務,那麼必須使用PDO對象中的beginTransaction()方法來啟動一個事務。如果底層驅動程序不支持事務,那麼將會拋出一個PDOException異常。可以使用PDO對象中的commit()或rollback()方法來結束一個事務,這取決於事務中運行的代碼是否成功。

18.7.2 構建事務處理的應用程序

例如,一次在線購物的過程,選好一款產品,價格為80元,採用網上銀行轉賬方式付款。假設用戶userA向用戶userB的賬戶轉賬,需要從userA賬戶中減去80元,並向userB賬戶加上80元。首先,在demo數據庫中準備一張InnoDB類型的數據表(account),用於保存兩個用戶的賬戶信息,包括其姓名和可用現金數據,並向表中插入userA和userB的數據記錄,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在下面的示例中,這個轉賬過程需要執行兩條SQL命令,真實場景中還會有其他步驟。為了保證數據的一致性,需要把此過程變成一個事務,確保數據不會由於某個步驟執行失敗而遭到破壞,代碼如下所示:

"

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

18.7 PDO的事務處理

事務是確保數據庫一致的機制,是一個或一系列的查詢,作為一個單元的一組有序的數據庫操作。如果組中的所有SQL語句都操作成功,則認為事務成功,那麼事務被提交,其修改將作用於所有其他數據庫進程。即使在事務的組中只有一個環節操作失敗,事務也不成功,整個事務將被回滾,該事務中的所有操作都將被取消。事務功能是企業級數據庫的一個重要組成部分,因為很多業務過程都包括多個步驟。如果任何一個步驟操作失敗,則所有步驟都不應發生。事務處理有4個重要特徵:原子性(Atomicity)、一致性(Consistency)、獨立性(Isolation)和持久性(Durability),即ACID。在一個事務中執行的任何工作,即使它是分階段執行的,也一定可以保證該工作會安全地應用於數據庫,並且在工作被提交時,不會受到其他連接的影響。

18.7.1 MySQL的事務處理

在MySQL 4.0及以上版本中均默認啟用事務,但MySQL目前只有InnoDB和BDB兩個數據表類型才支持事務,兩個表類型具有相同的特性,InnoDB表類型具有比BDB還豐富的特性,速度更快,因此,建議使用InnoDB表類型。創建InnoDB類型的表實際上與創建任何其他類型的表的過程類似,如果數據庫沒有設置默認的表類型,就需要在創建時顯式指定將表創建為InnoDB類型。創建InnoDB類型的僱員表employees,代碼如下所示:

CREATE TABLE employees(…) TYPE=InnoDB; //使用TYPE指定表類型為InnoDB

在默認情況下,MySQL是以自動提交(autocommit)模式運行的,這就意味著所執行的每條語句都會立即寫入數據庫。如果使用事務安全的表格類型,是不希望有自動提交的行為的。要在當前的會話中關閉自動提交,執行如下所示的MySQL命令:

MySQL> SET AUTOCOMMIT = 0; //在當前的會話中關閉自動提交

如果自動提交被打開了,必須使用如下語句開始一個事務;如果自動提交是關閉的,則不需要使用這條命令,因為當輸入一條SQL語句時,一個事務將自動啟動。

MySQL> START TRANSACTION; //開始一個事務

在完成了一組事務的語句輸入後,可以使用如下語句將其提交給數據庫。這樣,該事務才能在其他會話中被用戶看見。

MySQL> COMMIT; //提交一個事務給數據庫

如果改變主意,可以使用如下語句將數據庫回到以前的狀態。

MySQL> ROOLBACK; //事務將被回滾,所有操作都將被取消

並不是每種數據庫都支持事務,PDO只為能夠執行事務的數據庫提供事務支持。所以當第一次打開連接時,PDO需要在“自動提交(auto-commit)”模式下運行。如果需要一個事務,那麼必須使用PDO對象中的beginTransaction()方法來啟動一個事務。如果底層驅動程序不支持事務,那麼將會拋出一個PDOException異常。可以使用PDO對象中的commit()或rollback()方法來結束一個事務,這取決於事務中運行的代碼是否成功。

18.7.2 構建事務處理的應用程序

例如,一次在線購物的過程,選好一款產品,價格為80元,採用網上銀行轉賬方式付款。假設用戶userA向用戶userB的賬戶轉賬,需要從userA賬戶中減去80元,並向userB賬戶加上80元。首先,在demo數據庫中準備一張InnoDB類型的數據表(account),用於保存兩個用戶的賬戶信息,包括其姓名和可用現金數據,並向表中插入userA和userB的數據記錄,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在下面的示例中,這個轉賬過程需要執行兩條SQL命令,真實場景中還會有其他步驟。為了保證數據的一致性,需要把此過程變成一個事務,確保數據不會由於某個步驟執行失敗而遭到破壞,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在上面的示例中,模擬了userA向userB轉賬80元的過程。這個過程需要兩條更新語句合作來完成,所以採用了事務處理,確保這兩條SQL語句對數據操作的一致性。兩條更新分別完成都很簡單,但通過將這兩條更新語句包括在beginTransaction()和commit()調用中,並通過try區塊試著執行,就可以保證在更改完成之前,其他人無法看到更改。如果發生了錯誤,則catch區塊可以回滾事務開始以來發生的所有更改,並打印一條錯誤消息。

"

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

18.7 PDO的事務處理

事務是確保數據庫一致的機制,是一個或一系列的查詢,作為一個單元的一組有序的數據庫操作。如果組中的所有SQL語句都操作成功,則認為事務成功,那麼事務被提交,其修改將作用於所有其他數據庫進程。即使在事務的組中只有一個環節操作失敗,事務也不成功,整個事務將被回滾,該事務中的所有操作都將被取消。事務功能是企業級數據庫的一個重要組成部分,因為很多業務過程都包括多個步驟。如果任何一個步驟操作失敗,則所有步驟都不應發生。事務處理有4個重要特徵:原子性(Atomicity)、一致性(Consistency)、獨立性(Isolation)和持久性(Durability),即ACID。在一個事務中執行的任何工作,即使它是分階段執行的,也一定可以保證該工作會安全地應用於數據庫,並且在工作被提交時,不會受到其他連接的影響。

18.7.1 MySQL的事務處理

在MySQL 4.0及以上版本中均默認啟用事務,但MySQL目前只有InnoDB和BDB兩個數據表類型才支持事務,兩個表類型具有相同的特性,InnoDB表類型具有比BDB還豐富的特性,速度更快,因此,建議使用InnoDB表類型。創建InnoDB類型的表實際上與創建任何其他類型的表的過程類似,如果數據庫沒有設置默認的表類型,就需要在創建時顯式指定將表創建為InnoDB類型。創建InnoDB類型的僱員表employees,代碼如下所示:

CREATE TABLE employees(…) TYPE=InnoDB; //使用TYPE指定表類型為InnoDB

在默認情況下,MySQL是以自動提交(autocommit)模式運行的,這就意味著所執行的每條語句都會立即寫入數據庫。如果使用事務安全的表格類型,是不希望有自動提交的行為的。要在當前的會話中關閉自動提交,執行如下所示的MySQL命令:

MySQL> SET AUTOCOMMIT = 0; //在當前的會話中關閉自動提交

如果自動提交被打開了,必須使用如下語句開始一個事務;如果自動提交是關閉的,則不需要使用這條命令,因為當輸入一條SQL語句時,一個事務將自動啟動。

MySQL> START TRANSACTION; //開始一個事務

在完成了一組事務的語句輸入後,可以使用如下語句將其提交給數據庫。這樣,該事務才能在其他會話中被用戶看見。

MySQL> COMMIT; //提交一個事務給數據庫

如果改變主意,可以使用如下語句將數據庫回到以前的狀態。

MySQL> ROOLBACK; //事務將被回滾,所有操作都將被取消

並不是每種數據庫都支持事務,PDO只為能夠執行事務的數據庫提供事務支持。所以當第一次打開連接時,PDO需要在“自動提交(auto-commit)”模式下運行。如果需要一個事務,那麼必須使用PDO對象中的beginTransaction()方法來啟動一個事務。如果底層驅動程序不支持事務,那麼將會拋出一個PDOException異常。可以使用PDO對象中的commit()或rollback()方法來結束一個事務,這取決於事務中運行的代碼是否成功。

18.7.2 構建事務處理的應用程序

例如,一次在線購物的過程,選好一款產品,價格為80元,採用網上銀行轉賬方式付款。假設用戶userA向用戶userB的賬戶轉賬,需要從userA賬戶中減去80元,並向userB賬戶加上80元。首先,在demo數據庫中準備一張InnoDB類型的數據表(account),用於保存兩個用戶的賬戶信息,包括其姓名和可用現金數據,並向表中插入userA和userB的數據記錄,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在下面的示例中,這個轉賬過程需要執行兩條SQL命令,真實場景中還會有其他步驟。為了保證數據的一致性,需要把此過程變成一個事務,確保數據不會由於某個步驟執行失敗而遭到破壞,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在上面的示例中,模擬了userA向userB轉賬80元的過程。這個過程需要兩條更新語句合作來完成,所以採用了事務處理,確保這兩條SQL語句對數據操作的一致性。兩條更新分別完成都很簡單,但通過將這兩條更新語句包括在beginTransaction()和commit()調用中,並通過try區塊試著執行,就可以保證在更改完成之前,其他人無法看到更改。如果發生了錯誤,則catch區塊可以回滾事務開始以來發生的所有更改,並打印一條錯誤消息。

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

"

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

18.7 PDO的事務處理

事務是確保數據庫一致的機制,是一個或一系列的查詢,作為一個單元的一組有序的數據庫操作。如果組中的所有SQL語句都操作成功,則認為事務成功,那麼事務被提交,其修改將作用於所有其他數據庫進程。即使在事務的組中只有一個環節操作失敗,事務也不成功,整個事務將被回滾,該事務中的所有操作都將被取消。事務功能是企業級數據庫的一個重要組成部分,因為很多業務過程都包括多個步驟。如果任何一個步驟操作失敗,則所有步驟都不應發生。事務處理有4個重要特徵:原子性(Atomicity)、一致性(Consistency)、獨立性(Isolation)和持久性(Durability),即ACID。在一個事務中執行的任何工作,即使它是分階段執行的,也一定可以保證該工作會安全地應用於數據庫,並且在工作被提交時,不會受到其他連接的影響。

18.7.1 MySQL的事務處理

在MySQL 4.0及以上版本中均默認啟用事務,但MySQL目前只有InnoDB和BDB兩個數據表類型才支持事務,兩個表類型具有相同的特性,InnoDB表類型具有比BDB還豐富的特性,速度更快,因此,建議使用InnoDB表類型。創建InnoDB類型的表實際上與創建任何其他類型的表的過程類似,如果數據庫沒有設置默認的表類型,就需要在創建時顯式指定將表創建為InnoDB類型。創建InnoDB類型的僱員表employees,代碼如下所示:

CREATE TABLE employees(…) TYPE=InnoDB; //使用TYPE指定表類型為InnoDB

在默認情況下,MySQL是以自動提交(autocommit)模式運行的,這就意味著所執行的每條語句都會立即寫入數據庫。如果使用事務安全的表格類型,是不希望有自動提交的行為的。要在當前的會話中關閉自動提交,執行如下所示的MySQL命令:

MySQL> SET AUTOCOMMIT = 0; //在當前的會話中關閉自動提交

如果自動提交被打開了,必須使用如下語句開始一個事務;如果自動提交是關閉的,則不需要使用這條命令,因為當輸入一條SQL語句時,一個事務將自動啟動。

MySQL> START TRANSACTION; //開始一個事務

在完成了一組事務的語句輸入後,可以使用如下語句將其提交給數據庫。這樣,該事務才能在其他會話中被用戶看見。

MySQL> COMMIT; //提交一個事務給數據庫

如果改變主意,可以使用如下語句將數據庫回到以前的狀態。

MySQL> ROOLBACK; //事務將被回滾,所有操作都將被取消

並不是每種數據庫都支持事務,PDO只為能夠執行事務的數據庫提供事務支持。所以當第一次打開連接時,PDO需要在“自動提交(auto-commit)”模式下運行。如果需要一個事務,那麼必須使用PDO對象中的beginTransaction()方法來啟動一個事務。如果底層驅動程序不支持事務,那麼將會拋出一個PDOException異常。可以使用PDO對象中的commit()或rollback()方法來結束一個事務,這取決於事務中運行的代碼是否成功。

18.7.2 構建事務處理的應用程序

例如,一次在線購物的過程,選好一款產品,價格為80元,採用網上銀行轉賬方式付款。假設用戶userA向用戶userB的賬戶轉賬,需要從userA賬戶中減去80元,並向userB賬戶加上80元。首先,在demo數據庫中準備一張InnoDB類型的數據表(account),用於保存兩個用戶的賬戶信息,包括其姓名和可用現金數據,並向表中插入userA和userB的數據記錄,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在下面的示例中,這個轉賬過程需要執行兩條SQL命令,真實場景中還會有其他步驟。為了保證數據的一致性,需要把此過程變成一個事務,確保數據不會由於某個步驟執行失敗而遭到破壞,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在上面的示例中,模擬了userA向userB轉賬80元的過程。這個過程需要兩條更新語句合作來完成,所以採用了事務處理,確保這兩條SQL語句對數據操作的一致性。兩條更新分別完成都很簡單,但通過將這兩條更新語句包括在beginTransaction()和commit()調用中,並通過try區塊試著執行,就可以保證在更改完成之前,其他人無法看到更改。如果發生了錯誤,則catch區塊可以回滾事務開始以來發生的所有更改,並打印一條錯誤消息。

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

"

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

18.7 PDO的事務處理

事務是確保數據庫一致的機制,是一個或一系列的查詢,作為一個單元的一組有序的數據庫操作。如果組中的所有SQL語句都操作成功,則認為事務成功,那麼事務被提交,其修改將作用於所有其他數據庫進程。即使在事務的組中只有一個環節操作失敗,事務也不成功,整個事務將被回滾,該事務中的所有操作都將被取消。事務功能是企業級數據庫的一個重要組成部分,因為很多業務過程都包括多個步驟。如果任何一個步驟操作失敗,則所有步驟都不應發生。事務處理有4個重要特徵:原子性(Atomicity)、一致性(Consistency)、獨立性(Isolation)和持久性(Durability),即ACID。在一個事務中執行的任何工作,即使它是分階段執行的,也一定可以保證該工作會安全地應用於數據庫,並且在工作被提交時,不會受到其他連接的影響。

18.7.1 MySQL的事務處理

在MySQL 4.0及以上版本中均默認啟用事務,但MySQL目前只有InnoDB和BDB兩個數據表類型才支持事務,兩個表類型具有相同的特性,InnoDB表類型具有比BDB還豐富的特性,速度更快,因此,建議使用InnoDB表類型。創建InnoDB類型的表實際上與創建任何其他類型的表的過程類似,如果數據庫沒有設置默認的表類型,就需要在創建時顯式指定將表創建為InnoDB類型。創建InnoDB類型的僱員表employees,代碼如下所示:

CREATE TABLE employees(…) TYPE=InnoDB; //使用TYPE指定表類型為InnoDB

在默認情況下,MySQL是以自動提交(autocommit)模式運行的,這就意味著所執行的每條語句都會立即寫入數據庫。如果使用事務安全的表格類型,是不希望有自動提交的行為的。要在當前的會話中關閉自動提交,執行如下所示的MySQL命令:

MySQL> SET AUTOCOMMIT = 0; //在當前的會話中關閉自動提交

如果自動提交被打開了,必須使用如下語句開始一個事務;如果自動提交是關閉的,則不需要使用這條命令,因為當輸入一條SQL語句時,一個事務將自動啟動。

MySQL> START TRANSACTION; //開始一個事務

在完成了一組事務的語句輸入後,可以使用如下語句將其提交給數據庫。這樣,該事務才能在其他會話中被用戶看見。

MySQL> COMMIT; //提交一個事務給數據庫

如果改變主意,可以使用如下語句將數據庫回到以前的狀態。

MySQL> ROOLBACK; //事務將被回滾,所有操作都將被取消

並不是每種數據庫都支持事務,PDO只為能夠執行事務的數據庫提供事務支持。所以當第一次打開連接時,PDO需要在“自動提交(auto-commit)”模式下運行。如果需要一個事務,那麼必須使用PDO對象中的beginTransaction()方法來啟動一個事務。如果底層驅動程序不支持事務,那麼將會拋出一個PDOException異常。可以使用PDO對象中的commit()或rollback()方法來結束一個事務,這取決於事務中運行的代碼是否成功。

18.7.2 構建事務處理的應用程序

例如,一次在線購物的過程,選好一款產品,價格為80元,採用網上銀行轉賬方式付款。假設用戶userA向用戶userB的賬戶轉賬,需要從userA賬戶中減去80元,並向userB賬戶加上80元。首先,在demo數據庫中準備一張InnoDB類型的數據表(account),用於保存兩個用戶的賬戶信息,包括其姓名和可用現金數據,並向表中插入userA和userB的數據記錄,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在下面的示例中,這個轉賬過程需要執行兩條SQL命令,真實場景中還會有其他步驟。為了保證數據的一致性,需要把此過程變成一個事務,確保數據不會由於某個步驟執行失敗而遭到破壞,代碼如下所示:

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

在上面的示例中,模擬了userA向userB轉賬80元的過程。這個過程需要兩條更新語句合作來完成,所以採用了事務處理,確保這兩條SQL語句對數據操作的一致性。兩條更新分別完成都很簡單,但通過將這兩條更新語句包括在beginTransaction()和commit()調用中,並通過try區塊試著執行,就可以保證在更改完成之前,其他人無法看到更改。如果發生了錯誤,則catch區塊可以回滾事務開始以來發生的所有更改,並打印一條錯誤消息。

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

《細說PHP》第四版 樣章 第18章 數據庫抽象層PDO 9

"

相關推薦

推薦中...