1

我有一个网站,其中包含相同 CMS 的不同实例;他们使用相同的代码(PHP)和相同的数据库模型。当然内容不同。我有脚本来检查数据库模型中的偏差。

现在,对于一些网站,我需要添加一些额外的字段。例如,所有站点都有一个这样的用户表(使用相应的表格来填写数据):

Table user
  id
  username
  email

对于一些站点,我需要添加例如地址和年龄,而对于另一个站点,我需要添加电话号码。

有没有办法在没有丑陋的结构的情况下做到这一点

if ($site_name == 'siteA') {
   /* show field Z */
}
4

3 回答 3

2

您应该使用版本控制和技术包装类来处理您的数据库访问。

在包装器中,您将检查数据库的版本,并根据它执行适当的查询。

你也可以有一个专用的代码,不是吗?您很可能有一个有特定需求的客户。为什么不给他安装一个特定的文件系统?

于 2013-08-30T12:24:55.907 回答
0

以下算法可能会有所帮助:

根据配置文件和检测站点名称,我们可以执行以下操作:

// in conf.php
$siteA_fields = array('field1', 'field2', 'field1A');
// in the above array you have to include all fields you want to select with SiteA

$siteB_fields = array('field1', 'field2', 'field1B');
// in the above array you have to include all fields you want to select with SiteB

$sites = array('domain1.com' => 'siteA', 'domain2.com' => 'siteB');

.

// in your script file or master include

function detectDomain(){
 // return domain of the site
}

    function prepareSql(){
    $site = $sites[detectDomain()];
    $fields = $site.'_fields';

    $sql = 'SELECT '.implode(",",$$fields).' FROM table';
    return $sql

    }

您可以通过添加参数来改进您的 prepareSql。这样我认为你不必做出这样的条件。

结论:您需要的解决方案应该取决于配置文件。

于 2013-08-30T12:52:28.337 回答
0

您可以使用站点名称和应为特定类型显示的属性创建一个额外的表。例如:

 _______________________
| site_name | attribute |
|-----------------------|
| siteA     | address   |
| siteA     | age       |
| siteB     | address   |
| siteB     | phone_no  |
|___________|___________|

将所有(基本和额外属性)存储在同一个表中,并在您的 php 代码中使用存储在新表中的信息动态生成选择查询。因此,对于上面的示例,第一个站点的查询将是:

SELECT id, username, email, address, age FROM user;

对于第二个:

SELECT id, username, email, address, phone_no FROM user;

您可以使用 PHP 轻松创建这些查询

于 2013-08-30T12:59:36.647 回答