在以下範例中,假設我們正在為一位新員工建立一組條目,該員工的 ID 編號為 23。除了輸入該人員的基本資料外,我們還需要記錄他們的薪資。進行兩次單獨的更新非常簡單,但是透過將它們包含在 PDO::beginTransaction() 和 PDO::commit() 呼叫中,我們可以保證沒有其他人能夠在這些變更完成之前看到它們。如果出現問題,catch 區塊會回滾自交易啟動以來所做的所有變更,然後印出錯誤訊息。
<?php
try {
$dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
array(PDO::ATTR_PERSISTENT => true));
echo "已連線\n";
} catch (Exception $e) {
die("無法連線: " . $e->getMessage());
}
try {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')");
$dbh->exec("insert into salarychange (id, amount, changedate)
values (23, 50000, NOW())");
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "失敗: " . $e->getMessage();
}
?>