当前位置:首页 > PHP

php 实现事务

2026-01-29 10:05:55PHP

事务的基本概念

事务是数据库操作中的一个重要机制,用于确保一组操作要么全部成功执行,要么全部不执行。事务具有ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

使用PDO实现事务

PDO(PHP Data Objects)是PHP中用于数据库访问的轻量级接口,支持事务操作。以下是一个使用PDO实现事务的示例:

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 (Exception $e) {
    $pdo->rollBack();
    echo "Transaction failed: " . $e->getMessage();
}
?>

使用MySQLi实现事务

MySQLi是PHP中另一个常用的数据库扩展,也支持事务操作。以下是使用MySQLi实现事务的示例:

php 实现事务

<?php
$mysqli = new mysqli("localhost", "username", "password", "test");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

$mysqli->autocommit(FALSE);

try {
    $amount = 100;
    $fromId = 1;
    $toId = 2;

    $mysqli->query("UPDATE accounts SET balance = balance - $amount WHERE id = $fromId");
    $mysqli->query("UPDATE accounts SET balance = balance + $amount WHERE id = $toId");

    $mysqli->commit();
    echo "Transaction completed successfully";
} catch (Exception $e) {
    $mysqli->rollback();
    echo "Transaction failed: " . $e->getMessage();
}

$mysqli->close();
?>

事务的注意事项

确保在事务中使用异常处理机制,以便在发生错误时能够回滚事务。避免在事务中执行长时间运行的操作,以减少锁定资源的时间。

嵌套事务的处理

PHP的PDO和MySQLi本身不支持真正的嵌套事务,但可以通过保存点(SAVEPOINT)模拟嵌套事务的行为。以下是使用PDO实现保存点的示例:

<?php
try {
    $pdo->beginTransaction();
    $pdo->exec("SAVEPOINT point1");

    // 执行一些操作

    $pdo->exec("RELEASE SAVEPOINT point1");
    $pdo->commit();
} catch (Exception $e) {
    $pdo->exec("ROLLBACK TO SAVEPOINT point1");
    $pdo->rollBack();
}
?>

标签: 事务php
分享给朋友:

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_sh…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $n…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…