一个表的不同表前缀?

时间:2011-11-15 21:28:10

标签: php mysql prefixes

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

  • 主要安装:/ home / www / main,数据库main,前缀is1
  • 第二次安装:/ home / www / second,数据库main,前缀is2
  • 第三次安装:/ home / www / third,数据库主,前缀为3

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

3 个答案:

答案 0 :(得分: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.htmlhttp://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功能,以便在所有三个数据库中插入/更新/删除用户数据(事务处理会很好)。

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