处理表前缀没有任何数据库配置文件

时间:2017-08-04 04:51:27

标签: php mysql codeigniter

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

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

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

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

注意:这不仅限于Codeigniter。这是任何拥有数据库的网站的一般问题。我正在研究CI中的一个项目,以便举例说明CI如何处理前缀。

2 个答案:

答案 0 :(得分:0)

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

  1. 创建一个表格,其中所有用户设置数据都可用。如

    //user_setting table columns
    id, user_id, db_prefix, site_url, .......,
    
  2. 现在从用户设置表中获取用户db_prefix也可用的所有设置数据。

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

    1. 现在使用设置数据。

      // 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 = '';
      }
      
    2. 现在使用您的表名concat $db_prefix。希望它能奏效。

答案 1 :(得分:0)

config / database.php 中会有一个名为

的参数
'dbprefix' => 'userDefinedPrefix',

在其中设置前缀,现在您可以在模型中使用它

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