我的产品有50个客户。每个客户都有一个MYSQL数据库,我正在使用Codeigniter。
我有50个子文件夹,例如domain.com/client1 domain.com/client2等等我想为所有客户和不同的数据库和子域只安装一个我不想为每个新客户端安装多个副本
理想情况下domain.com/app/
实现这一目标的最佳方法是什么?我尝试为每个客户动态创建文件夹,并在客户注册时编写diff配置文件。我想我在这里做错了什么。
您想要的是多租户架构,即所有客户的相同代码,但每个客户都有专用数据库。
1)您可以做的是创建一个主数据库来记录用户及其关联的数据库。一旦用户注册,就为它们创建一个新数据库并更新主表,记录与该用户关联的数据库名称。
2)当用户登录时,您需要使用主表数据进行身份验证,一旦通过身份验证,您就拥有与用户关联的数据库名称。获得数据库名称后,需要将数据库切换到用户的数据库。 CodeIgniter中有可用的功能,您可以在其中更新$db
变量:
$this->db = $this->load->database();
一旦完成,所有操作将仅对相关用户的数据库执行。
注意:您需要在所有必需文件中更改$db
变量,或者您可以全局更改它。
希望这可以帮助。
编辑
要全局加载数据库,可以将数据库保存在会话中,并在辅助文件中创建一个函数(使用会话中的数据库名称),该函数将切换数据库。您只需要在主控制器中加载帮助器,这将全局切换$db
。