我正在尝试用CodeIgniter编写一个脚本,该脚本将创建一个数据库,然后将表与新表中的各种字段一起添加到新创建的数据库中。
到目前为止,我已经使用dbforge来创建新的数据库,但是由于我使用的是数据库库,并且具有预先设置的数据库连接值,所以当它创建一个表时,它会将它放在预选的数据库中,而不是它刚刚创建的数据库中。
在database.php配置文件中,我有以下内容:
$db['default']['database'] = 'db1';如果我使用以下命令创建一个新数据库:
$this->dbforge->create_database('db2');将创建'db2‘,但是下面的命令将表放在'db1’中。
$this->dbforge->create_table('table1');我需要在'db2‘中创建'table1’。如何让CI选择新创建的数据库('db2')在正确的位置创建表,然后切换回'db1'?
我看过以下问题,这与我所做的类似,但我不想在database.php中放置任何进一步的连接条目
任何帮助都很感激!
编辑-我应该添加create_database可以有数据库名称的任何名称.这是一个脚本,用于自动创建数据库和从表单中提取DB名称的相关表。
发布于 2013-05-12 14:16:04
$this->db->query('use db2');
$this->db->query('use DB1');发布于 2014-09-12 14:29:40
if ($this->dbforge->create_database('my_db_test'))
{
try{
$current_database = "my_db_test";
$this->db->database = $current_database;
$this->db->close();
$config['hostname'] = "localhost";
$config['username'] = "root";
$config['password'] = "";
$config['database'] = $current_database;
$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->load->database($config);
$fields = array(
'blog_id' => array(
'type' => 'INT',
'constraint' => 5,
'unsigned' => TRUE,
'auto_increment' => TRUE
),
'blog_title' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
'blog_author' => array(
'type' =>'VARCHAR',
'constraint' => '100',
'default' => 'King of Town',
),
'blog_description' => array(
'type' => 'TEXT',
'null' => TRUE,
),
);
$this->dbforge->add_field($fields);
$this->dbforge->add_key('blog_id', TRUE);
$this->dbforge->create_table('ipn_log', TRUE);
}catch(Exception $e){
echo $e->getMessage();die;
}
}
}发布于 2019-02-09 16:27:58
更好的方法是获得一个dbforge类,表示要操作的数据库。
$this->myforge = $this->load->dbforge($this->other_db, TRUE);使用$this->myforge对象可以像往常一样工作。
此方法将避免在构建库时发生冲突。最好不要在运行时破坏库用户的默认数据库。
https://stackoverflow.com/questions/16500733
复制相似问题