以下の例では、新しい従業員のデータを作成しているものとします。
この従業員には ID 番号 23 を割り当てます。この人物についての
基礎データを入力するだけでなく、その給与についても登録する
必要があります。以下では単純に 2 つの別々の更新を行っていますが、
それらは 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();
}
?>