You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在执行删除操作前插入记录(日志记录)?SQL PDO PHP环境

PHP PDO 删除操作前插入日志记录实现方案

核心思路

利用PDO的事务机制,将插入日志和删除数据两个操作绑定为原子操作:要么两个操作都成功执行,要么全部回滚,避免出现日志已插入但删除失败,或者删除成功却没留下日志的情况。

整合后的完整代码

<?php
// 初始化PDO连接,开启异常模式以便事务处理
$dsn = 'mysql:host=localhost;dbname=your_db;charset=utf8mb4';
$username = 'your_username';
$password = 'your_password';
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 开启异常错误模式
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];

try {
    $pdo = new PDO($dsn, $username, $password, $options);
    $pdo->beginTransaction(); // 开启事务

    // 1. 先插入删除日志
    $userId = $_GET['id']; // 假设要删除的记录ID来自请求参数
    $logStmt = $pdo->prepare("INSERT INTO delete_logs (target_id, deleted_at, operator) VALUES (?, NOW(), ?)");
    // 可补充操作人信息,比如当前登录用户ID,示例用固定值演示
    $logStmt->execute([$userId, 'admin']);

    // 2. 执行删除操作
    $deleteStmt = $pdo->prepare("DELETE FROM your_table WHERE id = ?");
    $deleteStmt->execute([$userId]);

    $pdo->commit(); // 提交事务,两个操作都生效
    echo "删除成功,日志已记录";
} catch (PDOException $e) {
    $pdo->rollBack(); // 出错时回滚所有操作
    die("操作失败: " . $e->getMessage());
}
?>

关键注意事项

  • 开启PDO异常模式:必须设置PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,操作出错时会抛出异常,才能触发事务回滚。
  • 事务的原子性:通过beginTransaction()开启事务,所有操作完成后用commit()提交,出错则用rollBack()回滚,保证日志和删除操作的一致性。
  • 日志信息完整性:日志表建议包含被删除数据的标识、删除时间、操作人信息,可选存储被删除数据的快照,方便后续溯源。

内容的提问来源于stack exchange,提问作者bricas30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:06:28