我们知道codeigniter允许我们为表使用前缀,我们需要在database.php文件中定义前缀。但是,我想做一些不同的事情。我有一个脚本和任何具有该脚本并安装它的用户,安装页面将询问典型的配置设置,包括用户是否希望在安装数据库之前使用表的任何前缀。我想将该前缀存储在设置表中,并希望从数据库('setting'表)获取前缀,而不是在database.php中定义前缀。 Wordpress在安装时也会这样做。我们甚至可以随时在Wordpress中更改前缀。
这样我的用户(谁是我的脚本的买家)可能不是程序员,他们应该能够随时通过管理员方面轻松更改他们的表前缀。
我不希望他们从配置文件中更改前缀。
如果我将前缀存储在任何表中,那么前缀也将应用于该表(在上面的情况下设置表将成为prefix_settings)然后获取(通过查询)更新的前缀,该前缀存储在设置表I中需要知道什么是前缀,因为设置表也有新的前缀:)
注意:这不仅限于Codeigniter。这是任何拥有数据库的网站的一般问题。我正在研究CI中的一个项目,以便举例说明CI如何处理前缀。
答案 0 :(得分:0)
您可以在ci中手动设置数据库前缀。试一试
创建一个表格,其中所有用户设置数据都可用。如
//user_setting table columns
id, user_id, db_prefix, site_url, .......,
现在从用户设置表中获取用户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
。希望它能奏效。
答案 1 :(得分:0)
在 config / database.php 中会有一个名为
的参数'dbprefix' => 'userDefinedPrefix',
在其中设置前缀,现在您可以在模型中使用它
$this->anyName = $this->db->dbprefix('table_name');