新增数据时偶尔会失败,但是没有异常

wangsky522

问题描述

我用的是webman框架并且是webman/admin的插件 这个方法大部分时间会成功偶尔失败但是会出现一个问题在插入的时候有时候一直都是成功并且返回了成功的一条数据到前端 但是我又是发现数据库实际上没有新增或者说是新增之后自动删除了我有成功的时候数据库会跳过返回数据的那条id 这是什么情况?

程序代码或配置

 try {
        // 充值方式
        $payType = [
            1 => 'USDT',
            2 => '银行卡',
        ];

        // 检查支付方式是否有效
        if (!isset($payType[$data['pay_type']])) {
            return ['code' => 0, 'message' => translate('请选择充值方式')];
        }

        // 检查充值金额是否正确
        if (empty($data['money']) || $data['money'] < 0.1) {
            return ['code' => 0, 'message' => translate('充值金额错误')];
        }

        // 检查是否上传了充值凭证
        if (empty($data['images'])) {
            return ['code' => 0, 'message' => translate('请上传充值凭证')];
        }

        // 生成订单ID
        $orderid = date('YmdHis') . rand(100000, 999999);

        // 开始数据库事务
        DB::beginTransaction();

        // 插入充值记录
        $recharge = UserRecharge::create([
            'user_id' => $data['user_id'],
            'pay_type' => $data['pay_type'],
            'money' => $data['money'],
            'memo' => $payType[$data['pay_type']] . '充值',
            'images' => $data['images'],
            'orderid' => $orderid
        ]);

        // 如果插入失败,回滚事务,并返回错误信息
        if (!$recharge) {
            DB::rollBack();  // 回滚事务
            Log::error("充值申请失败, 无法插入数据", [
                'user_id' => $data['user_id'],
                'orderid' => $orderid
            ]);
            return ['code' => 0, 'message' => translate('余额充值失败')];
        }

        // 提交事务
        DB::commit();

        // 记录操作日志
        OperationLogService::add($data['user_id'], $request, ['change_content' => $data]);

        // 成功返回
        Log::info("充值申请成功", [
            'user_id' => $data['user_id'],
            'orderid' => $orderid
        ]);

    }
    catch (\Exception $e) {
        // 捕获异常,回滚事务并记录错误日志
        DB::rollBack();  // 回滚事务
        Log::error("充值申请异常", [
           'error' => $e->getMessage(),
            'user_id' => $data['user_id'],
            'orderid' => $orderid
        ]);
        return ['code' => 0, 'message' => translate($e->getMessage())];
    }
    // 返回成功信息
    return [
        'code' => 1,
        'message' => translate('充值申请成功'),
        'data' => $recharge
    ];
127 1 0
1个回答

walkor 打赏

业务用了事物没提交事物导致的,安装下webman/log 会检测并记录未提交的事物

  • wangsky522 18天前

    谢谢大佬,修好了 我这段时间看了连接池还怀疑过协程的问题原来是之前的一个关联方法的事务有一个没回滚 没检测到

×
🔝