php事务怎么实现
PHP 事务实现方法
在 PHP 中,事务通常用于确保数据库操作的原子性,即一组操作要么全部成功,要么全部失败。以下是几种常见的实现方式:
使用 PDO 实现事务
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$pdo->beginTransaction();
try {
$stmt1 = $pdo->prepare("UPDATE accounts SET balance = balance - :amount WHERE id = :id");
$stmt1->execute([':amount' => 100, ':id' => 1]);
$stmt2 = $pdo->prepare("UPDATE accounts SET balance = balance + :amount WHERE id = :id");
$stmt2->execute([':amount' => 100, ':id' => 2]);
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "Transaction failed: " . $e->getMessage();
}
使用 MySQLi 实现事务
$mysqli = new mysqli("localhost", "username", "password", "test");
$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();
} catch (Exception $e) {
$mysqli->rollback();
echo "Transaction failed: " . $e->getMessage();
}
$mysqli->autocommit(TRUE);
事务实现的注意事项
确保数据库引擎支持事务,如 InnoDB 引擎支持事务,而 MyISAM 不支持。
在事务中避免执行长时间运行的操作,这可能导致锁表时间过长。
事务应该尽可能简短,只包含必要的数据库操作。
考虑设置适当的事务隔离级别,防止并发问题。
嵌套事务的处理
PHP 原生数据库扩展不支持真正的嵌套事务,但可以通过保存点模拟:

$pdo->beginTransaction();
$pdo->exec("SAVEPOINT point1");
try {
// 嵌套事务操作
$pdo->exec("RELEASE SAVEPOINT point1");
} catch (Exception $e) {
$pdo->exec("ROLLBACK TO SAVEPOINT point1");
}
$pdo->commit();
以上方法涵盖了 PHP 中实现事务的主要方式,开发者可以根据项目需求选择适合的方案。






