我正在尝试使用CodeIgniter和DBForge来创建多租户应用。我的中央数据库有一个'users'表,用于存储用户名和数据库名。
我遇到的问题是创建单个数据库及其表。以下是代码片段:
if ($this->dbforge->create_database( $db_name ))
{
echo 'Database created!';
// an array of fields
$fields = array(
'name' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
);
// set them up for the new table
$this->dbforge->add_field($fields);
// create the new table in the new db
$this->dbforge->create_table('items');
}
创建数据库$ db_name时没有任何问题,但是当我创建表'items'时,它是在我的中央数据库上创建的,这不是我想要的。
答案 0 :(得分:0)
您正在尝试创建表时,它正在默认连接数据库中创建表,您必须将数据库与用户创建的数据库重新连接,并将连接的数据库对象传递给$ this-> db并再次进行重新加载在这里创建用户数据库中的表如何在用户数据库中创建表
if ($this->dbforge->create_database($db_name)) {
echo 'Database created!';
// an array of fields
$config['hostname'] = "localhost";
$config['username'] = "root";
$config['password'] = "";
$config['database'] = $db_name;
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";
$this->db = $this->load->database($config, TRUE); //<- magic start from here
$this->load->dbforge();
$fields = array(
'name' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
);
// set them up for the new table
$this->dbforge->add_field($fields);
// create the new table in the new db
$this->dbforge->create_table('items');
}
使你的代码更干净在application / config中创建一个user_db.php文件并将用户配置放在那里,每次在你的代码中使用$ config ['database']