1

假设,假设我多次安装了一些奇怪的 MySQL/PHP 驱动软件。它们是相同的软件,因此数据库表结构在所有安装中都是相同的。我想做的是让软件只为一个表使用不同的数据库前缀。具体来说,一个用户表。所以说安装是这样设置的:

  • 主安装:/home/www/main,数据库主,前缀为1
  • 第二次安装:/home/www/second,数据库主,前缀是2
  • 第三次安装:/home/www/third,数据库主,前缀是3

所以我想要告诉第二次安装和第三次安装通过该表从前缀为 is1 的用户表中提取它自己的数据。因此,在主安装上注册的任何用户也会在第二次和第三次注册,反之亦然。有可能吗,如果可以,我会怎么做?即使它只是一种提供相同基本结果的解决方法,我也会很高兴。

4

3 回答 3

2

如果您不想修改应用程序的 PHP 源代码,并且在这方面还不能配置,那么另一种选择是修改数据库,更改is2usersis3users成为以下视图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 的具体信息。)

根据应用程序,这可能无法完美运行——例如,应用程序可能会在内存中缓存一些信息(例如标识符序列的当前值)——但它可能会工作。在投入生产之前对其进行测试!

于 2011-11-15T21:45:08.697 回答
0

这个设置很简单,模式明智。您提到“安装”,这意味着您正在使用一些打包的库,该库可能包含一个配置文件,您可以在其中更改各种设置,其中一个设置可能是表前缀。如果没有表前缀选项,您可以浏览安装代码并找到架构所在的位置,并为每次安装手动更改前缀。

现在是最困难的部分,让代码按照您描述的方式运行。您必须让您的应用程序了解所有三个数据库,这意味着您可能必须在代码中添加两个新的数据库连接器(每个数据库一个连接器)。然后,您将不得不添加逻辑来处理用户 CRUD 功能,以便在所有三个数据库中插入/更新/删除用户数据(这里的事务会很好)。

您所描述的内容是可能的,但需要一些自定义代码。

于 2011-11-15T21:49:57.683 回答
0

你的 php 代码在 cfg.php 中可能是这样的:

$prefix = 'is3'

在 user.model.php 之类的东西中:

$sql = 'SELECT * FROM `'.$prefix.'users`';

因此,您需要更改三个安装代码中的两个以使用“用户”表。但这似乎太危险了。

于 2011-11-15T21:40:15.203 回答