2017-08-04 81 views
0

我们知道codeigniter允许我们使用表的前缀,我们需要在database.php文件中定义前缀。但是,我想要做一些不同的事情。我有一个脚本和任何将要安装它的用户,安装页面将询问典型的配置设置,包括用户是否希望在表可以安装数据库之前使用任何前缀。我想将该前缀存储在设置表中,并希望从数据库(“设置”表)获取前缀,而不是在database.php中定义前缀。 WordPress的安装时间相同。任何时候,我们甚至可以随时在Wordpress中更改前缀。处理表前缀没有任何数据库配置文件

这样我的用户(谁是我的脚本的买家)谁可能不是程序员,他们应该能够随时轻松更改他们的表前缀通过管理员端。

我不希望他们更改配置文件的前缀。

如果我将在任何表中存储前缀,那么前缀也将应用于该表(以上情况设置表将成为prefix_settings),然后获取(通过查询)存储在设置表中的更新的前缀我需要知道什么是前缀,因为设置表也有该新的前缀:)

注意:这不仅限于Codeigniter。这是任何有数据库的网站的一般问题。我只是在CI的一个项目上工作,所以给出了CI如何处理前缀的例子。

回答

0

你可以在ci中手动设置数据库前缀。试一试

  1. 创建一个表,所有用户设置数据将可用。如

    //user_setting table columns 
    id, user_id, db_prefix, site_url, ......., 
    
  2. 现在得到来自用户设置表的所有设置数据,其中用户db_prefix也可用。

示例查询:"SELECT * FROM user_setting WHERE user_id = 105"

  • 现在使用的设置数据。

    // For example, say it is $setting['db_prefix'] 
    
    if(!empty($setting['db_prefix'])){ 
        $this->db->set_dbprefix('newprefix'); 
        $db_prefix = $this->db->dbprefix('tablename'); 
    }else{ 
        $db_prefix = ''; 
    } 
    
  • 现在CONCAT $db_prefix您的表名。希望它能起作用。

    +0

    其实我想要一个解决方案,其中前缀来自数据库。在我已经知道的CI场景中,需要在数据库文件中添加前缀或者我们可以通过代码设置。但我想从管理面板给这个选项。希望它是有道理的。 – 99Points

    +0

    这就是为什么我提到你从admin获取db_prefix的原因,我以$ setting ['db_prefix'])为例。不过,我更详细地解释了我的答案。希望它能帮到你 –

    +0

    所以在上面的场景中,用户设置表不会有任何前缀吗?如果我们必须更改前缀,我们将替换所有其他表的前缀,但设置表将没有前缀,因为我们需要该表来获取它自己的前缀。这个解决方案很好,但我想要一些像Wordpress的东西,我不知道他们是如何做的。他们都有相同的前缀表。即使是存有前缀值的那个。 – 99Points

    0

    在你的config/database.php中会有所谓

    'dbprefix' => 'userDefinedPrefix', 
    

    设置你在它的前缀参数,现在你可以在模型中使用它

    $this->anyName = $this->db->dbprefix('table_name'); 
    
    +0

    我想我不能把问题放在明确的方式:( – 99Points

    相关问题