当前位置:首页 > PHP

php 实现事务

2026-01-29 10:05:55PHP

事务的基本概念

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

使用PDO实现事务

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

<?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
$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 实现事务

<?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实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session 是…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…