假设,假设我安装了一些奇怪的MySQL / PHP驱动软件。它们是相同的软件,因此数据库表结构与所有安装相同。我想做的是让软件为一个表使用不同的数据库前缀。具体来说,是用户表。所以说安装设置如下:
所以我想要的是通过该表告诉第二次安装和第三次安装从前缀is1上的users表中获取自己的数据。因此,在主安装上注册的任何用户也在第二和第三上注册,反之亦然。是否可能,如果是这样,我该怎么做?即使它只是一种提供相同基本结果的解决方法,我也会很高兴。
答案 0 :(得分:2)
如果您不想修改应用程序的PHP源代码,并且在这方面尚不可配置,则另一个选项是修改数据库,将is2users
和is3users
更改为关于is1users
的观点:
DROP TABLE is2users;
CREATE VIEW is2users AS SELECT * FROM is1users;
DROP TABLE is3users;
CREATE VIEW is3users AS SELECT * FROM is1users;
(有关视图的一般信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/views.html,http://dev.mysql.com/doc/refman/5.0/en/create-view.html了解有关CREATE VIEW的详细信息。)
根据应用程序的不同,这可能无法正常工作 - 例如,应用程序可能会在内存中缓存一些信息(例如标识符序列的当前值) - 但它可能会 工作。在投入生产之前对其进行测试!
答案 1 :(得分:0)
您的PHP代码可能类似于cfg.php:
$prefix = 'is3'
以及user.model.php:
之类的内容$sql = 'SELECT * FROM `'.$prefix.'users`';
因此,您需要更改三个安装代码中的两个以使用'users'表。但它似乎太危险了。
答案 2 :(得分:0)
这种设置很简单,模式方面。你提到'安装',这意味着你正在使用一些打包的库,它可能包含一个配置文件,您可以在其中更改各种设置,其中一个设置是表前缀。如果没有表前缀选项,您可以浏览安装代码并找到架构所在的位置,并为每次安装手动更改前缀。
现在是hardpart,让代码按照你的描述行事。您必须让您的应用程序了解所有三个数据库,这意味着您可能必须向代码添加两个新的数据库连接器(每个数据库一个连接器)。然后,您将不得不添加逻辑来处理用户CRUD功能,以便在所有三个数据库中插入/更新/删除用户数据(事务处理会很好)。
您所描述的内容是可能的,但需要一些自定义代码。