2013-05-11 46 views
7

我想在CodeIgniter中編寫一個腳本,它將創建一個數據庫,然後將表添加到新創建的數據庫以及新表中的各個字段。CodeIgniter&DBForge - 創建數據庫和表

到目前爲止,我已經有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中

Codeigniter showing error: No database selected

任何幫助不勝感激!

編輯 - 我要補充的是,create_database可能對數據庫的任何名稱,...這是一個腳本來自動創建一個數據庫,並在數據庫名稱從一種形式拉相關表格。

+0

如何把$這個 - > dbforge-> create_database( 'DB2');.我不知道要這樣做。我可以知道嗎?我已經把這個在控制器/ migrate.php中的索引函數,但我總是得到錯誤。謝謝。 – akbarbin 2015-01-06 14:31:42

回答

6
$this->db->query('use db2'); 

$this->db->query('use DB1'); 
0

在配置您的默認數據庫DB1 CREATE_TABLE方法將總是在選擇的數據庫中創建表,創建DB2後,您需要選擇DB2在數據庫中,您可以在以下方式

$config['hostname'] = "localhost"; 
    $config['username'] = "myusername"; 
    $config['password'] = "mypassword"; 
    $config['database'] = "db2"; 
    $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"; 

    $db2 = $this->load->database($config,TRUE); 
    $db2->dbforge->create_table('table1'); 

    //if you want to close connection 
    $db2->db->close(); 

用於做創建表更多信息,請CI用戶指南CI user Guide Connecting Database

+0

我已經這樣做了,但我得到了錯誤...未定義的屬性:CI_DB_mysql_driver :: $ dbforge – pmgrace 2013-05-12 10:13:13

0

change database connection of codeigniter migration

我用在上面的問題來解決我的問題提供建議。我創建第二個數據庫之後我用下面的命令切換到它:

$this->db->query('use db2'); 

這讓我在DB2中創建表。然後使用以下內容切換回默認數據庫:

$this->db->query('use DB1'); 

完全按照我的意願工作。

1
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; 
    } 
    } 

}