Yii 2.0的多个数据库连接



我有一个基于纯PHP的系统,现在我尝试将代码转换为Yii2。但我在这几个步骤中遇到了一个问题,我为每个用户都有一个数据库,当用户在我的系统中注册时,我会为它创建一个新的数据库,还有一个系统的主数据库。例如,我的数据库列表:

  • mainDb

  • 客户1

  • 客户2

  • 客户3

  • 客户4

  • 客户5

所以我不知道应该有多少数据库,在我当前的代码中,我定义了两个函数,例如:在MainDB上运行SQL在客户数据库上运行SQL在上面的每个函数中,我都设置了连接字符串,但如何用Yii2处理这个问题?

提前感谢您的帮助。

我想找到一个解决方案,帮助我处理基于数据库名称的连接字符串。

默认情况下,Yii 2支持多个数据库,这些数据库可以添加到各自的数据库配置文件中。但这不适用于您的用例,因为您将动态生成数据库。

您可以使用特定的集合模式为每个客户命名数据库。比如:db_customer_1,db_customer.2,。。。。,db_customer_100等

在这里,前缀"db_customer_"将被固定,然后添加客户ID。

在Yii 2中,您可以执行以下操作:

Yii::$app->get('db_customer_' . CUSTOMER_ID);

CUSTOMER_ID可以在会话中使用。

不需要额外的表格。简单快捷。

您可以创建一个单独的表来执行此操作。

假设您在mainDb.php.等其他文件中有一个主数据库连接字符串

对于前

  1. 让我们在mainDb数据库中创建一个新表作为customer_databases。以hostname、dbname、dbusername、dbpassword、customer_id等列为例。

  2. 在customer_databases表中引用customer_id作为customer_id

  3. 登录时,从mainDb获取客户的详细信息,并根据客户id进行连接。

  4. 仅此而已,您必须根据客户id 进行连接

注意-为了不进行一次又一次的连接,您可以在会话变量中设置连接,然后从db.php文件返回连接字符串。

参考-

<?php

session_start((;

if(isset($_SESSION["user_database"](({

$connection = $_SESSION["user_database"];
$connection = json_decode($connection, true);
$hostname = ($connection['hostname']) ? $connection['hostname'] : "localhost";
$dbname = ($connection['dbname']) ? $connection['dbname'] : "dbname";
$username = ($connection['username']) ? $connection['username'] : "username";
$password = ($connection['password']) ? $connection['password'] : "password";
return [
'class' => 'yiidbConnection',
'dsn' => 'mysql:host=' . $hostname . ';dbname=' . $dbname,
'username' => $username,
'password' => $password,
'charset' => 'utf8mb4',
];

}其他{

return [
'class' => 'yiidbConnection',
'dsn' => 'mysql:host=localhost;dbname=dbname',
'username' => 'username',
'password' => 'password',
'charset' => 'utf8'
];

}

另外,不要忘记在注销时破坏连接。

快乐编码谢谢Mukul Kashyap

相关内容

  • 没有找到相关文章

最新更新