php 实现事务
PHP 实现事务的方法
在 PHP 中,事务通常用于确保数据库操作的原子性、一致性、隔离性和持久性(ACID)。以下是使用 MySQLi 和 PDO 两种方式实现事务的示例。
使用 MySQLi 实现事务
MySQLi 是 PHP 中与 MySQL 数据库交互的扩展。以下是实现事务的代码示例:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$mysqli->autocommit(FALSE);
try {
$mysqli->query("INSERT INTO table1 (column1) VALUES ('value1')");
$mysqli->query("INSERT INTO table2 (column2) VALUES ('value2')");
$mysqli->commit();
echo "Transaction completed successfully.";
} catch (Exception $e) {
$mysqli->rollback();
echo "Transaction failed: " . $e->getMessage();
}
$mysqli->close();
?>
使用 PDO 实现事务
PDO(PHP Data Objects)是 PHP 中更通用的数据库访问抽象层。以下是使用 PDO 实现事务的代码示例:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$pdo->beginTransaction();
$pdo->exec("INSERT INTO table1 (column1) VALUES ('value1')");
$pdo->exec("INSERT INTO table2 (column2) VALUES ('value2')");
$pdo->commit();
echo "Transaction completed successfully.";
} catch (Exception $e) {
$pdo->rollBack();
echo "Transaction failed: " . $e->getMessage();
}
?>
事务的注意事项
- 错误处理:确保在事务中捕获异常并进行回滚,避免数据不一致。
- 隔离级别:根据需求设置适当的事务隔离级别,例如
READ COMMITTED或SERIALIZABLE。 - 性能影响:长时间运行的事务可能锁定资源,影响数据库性能,应尽量缩短事务持续时间。
设置事务隔离级别
在 PDO 中,可以通过以下方式设置事务隔离级别:
$pdo->exec("SET TRANSACTION ISOLATION LEVEL READ COMMITTED");
$pdo->beginTransaction();
在 MySQLi 中,可以通过 SQL 语句直接设置:

$mysqli->query("SET TRANSACTION ISOLATION LEVEL READ COMMITTED");
$mysqli->autocommit(FALSE);
通过以上方法,可以在 PHP 中有效实现事务管理,确保数据库操作的可靠性和一致性。






