在以下示例中,我们假设我们为一名已被分配 23 号 ID 的新员工创建一组条目。除了输入该人的基本数据之外,我们还需要记录他们的工资。进行两次单独的更新非常简单,但可以通过将它们括在 PDO::beginTransaction() 和 PDO::commit() 中,我们可以保证在更改完成之前,所有人都无法看到这些更改。如果出现问题,则 catch 块将回滚自事务启动以来做出的所有更改,然后打印错误消息。
<?php
try {
$dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
array(PDO::ATTR_PERSISTENT => true));
echo "Connected\n";
} catch (Exception $e) {
die("Unable to connect: " . $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 "Failed: " . $e->getMessage();
}
?>