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

WHMCS自定义模块切换MySQL数据库失败 仍访问默认库表报错如何修复

问题根因
  • 调用事务时使用了无参数的Capsule::connection(),默认调用WHMCS系统的默认数据库连接(对应报错中的admin_billing库),没有使用你自定义配置的rscmodule连接
  • 闭包的参数会覆盖你之前定义的$vpnsql变量,实际执行插入时用的是系统默认连接的实例
  • 原有rscmodule_DatabaseConnect返回的是查询构建器对象,不是数据库连接实例,无法直接用于开启对应库的事务
修复方案

首先调整rscmodule_DatabaseConnect函数,直接返回自定义连接实例,方便后续开启事务:

function rscmodule_DatabaseConnect()
{   
    try {
        $connection = Capsule::getInstance()->getConnection('rscmodule');
        return $connection;
    } catch (\Exception $e) {
        $config = array(
            'driver' => 'mysql',
            'host' => 'localhost',
            'database' => 'admin_test',
            'username' => 'admin_test',
            'password' => '*****',
            'charset'  => 'utf8',
        );
        try {
            Capsule::getInstance()->addConnection(
                $config,
                'rscmodule'
            );
            return Capsule::getInstance()->getConnection('rscmodule');
        } catch (\Exception $e) {
            return "Unable to connect to rscmodule Database.  "
            . "Please check rscmodule server configuration.  "
            . $e->getMessage();
        }
    }
}

再调整插入函数,在自定义连接实例上开启事务:

function rscmodule_DatabaseInsert()
{
    try {
        $vpnsql = rscmodule_DatabaseConnect();
        if (is_string($vpnsql)) {
            return $vpnsql; // 连接报错直接返回错误信息
        }
        // 直接在自定义连接实例上开启事务,不要用全局默认连接
        $vpnsql->transaction(
            function ($connection)
            {
                $connection->table('test')->insert(
                    [
                        'user_id' => 'fdffddfg',
                    ]
                );
            }
        );
    } catch (\Exception $e) {
        return "VPN Database Query Error: " . $e->getMessage();
    }
    return "success";
}

如果你不想修改原有连接函数的返回值,也可以直接指定连接名执行操作,无需提前拿连接实例:

// 极简实现版本
function rscmodule_DatabaseInsert()
{
    try {
        Capsule::connection('rscmodule')->transaction(function ($connection) {
            $connection->table('test')->insert(['user_id' => 'fdffddfg']);
        });
    } catch (\Exception $e) {
        // 首次调用不存在连接时捕获异常,初始化连接即可
        $config = [
            'driver' => 'mysql',
            'host' => 'localhost',
            'database' => 'admin_test',
            'username' => 'admin_test',
            'password' => '*****',
            'charset'  => 'utf8',
        ];
        Capsule::getInstance()->addConnection($config, 'rscmodule');
        // 重试执行插入
        Capsule::connection('rscmodule')->table('test')->insert(['user_id' => 'fdffddfg']);
    }
    return "success";
}

内容的提问来源于stack exchange,提问作者R. Riccardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:15:03