php实现事务控制
PHP 实现事务控制的方法
在 PHP 中,事务控制通常用于数据库操作,确保一组操作要么全部成功,要么全部失败。以下是实现事务控制的常见方法,以 MySQL 数据库为例。
使用 PDO 实现事务
PDO(PHP Data Objects)是 PHP 的一个数据库抽象层,支持事务控制。
<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->beginTransaction();
$stmt1 = $pdo->prepare("UPDATE accounts SET balance = balance - :amount WHERE id = :id");
$stmt1->bindParam(':amount', $amount);
$stmt1->bindParam(':id', $fromId);
$stmt1->execute();
$stmt2 = $pdo->prepare("UPDATE accounts SET balance = balance + :amount WHERE id = :id");
$stmt2->bindParam(':amount', $amount);
$stmt2->bindParam(':id', $toId);
$stmt2->execute();
$pdo->commit();
echo "Transaction completed successfully.";
} catch (PDOException $e) {
$pdo->rollBack();
echo "Transaction failed: " . $e->getMessage();
}
?>
使用 MySQLi 实现事务
MySQLi 是 PHP 的 MySQL 扩展,也支持事务控制。

<?php
$mysqli = new mysqli("localhost", "username", "password", "test");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$mysqli->autocommit(FALSE);
try {
$mysqli->query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
$mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
$mysqli->commit();
echo "Transaction completed successfully.";
} catch (Exception $e) {
$mysqli->rollback();
echo "Transaction failed: " . $e->getMessage();
}
$mysqli->close();
?>
事务控制的关键点
- 开启事务:使用
beginTransaction()(PDO)或autocommit(FALSE)(MySQLi)开始事务。 - 执行操作:在事务中执行所有需要的数据库操作。
- 提交或回滚:如果所有操作成功,使用
commit()提交事务;如果任何操作失败,使用rollBack()回滚事务。
注意事项
- 确保数据库引擎支持事务(如 InnoDB)。
- 在事务中避免长时间运行的操作,以免锁定资源。
- 使用异常处理确保事务在出错时能够回滚。
通过以上方法,可以有效地在 PHP 中实现事务控制,确保数据的一致性和完整性。






