7

我正在尝试在 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 中放置任何进一步的连接条目

Codeigniter 显示错误:未选择数据库

任何帮助表示赞赏!

编辑- 我应该补充一点,create_database 可以有任何名称作为数据库名称...这是一个脚本,用于自动创建数据库和从表单中提取数据库名称的相关表。

4

6 回答 6

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

$this->db->query('use DB1');
于 2013-05-12T14:16:04.350 回答
2
    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;
   }
  }

}
于 2014-09-12T14:29:40.510 回答
1

更好的方法是获取代表您要操作的数据库的 dbforge 类

$this->myforge = $this->load->dbforge($this->other_db, TRUE);

使用该$this->myforge对象照常工作。

这种方法将避免在构建库时发生冲突。最好不要在运行时弄乱图书馆用户的默认数据库。

于 2019-02-09T16:27:58.137 回答
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 用户指南 连接数据库

于 2013-05-12T05:32:59.907 回答
0

更改 codeigniter 迁移的数据库连接

我已使用上述问题中提供的建议来解决我的问题。创建第二个数据库后,我使用以下命令切换到它:

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

这让我可以在 db2 中创建表。然后使用以下命令切换回默认数据库:

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

完全按照我想要的方式工作。

于 2013-05-12T14:05:39.793 回答
0

当您想在项目上使用 2 数据库时,首先您需要将两个数据库定义为 -

$DB1 = $this->load->database('group_one', TRUE);

$DB2 = $this->load->database('group_two', TRUE);

当您以这种方式连接时,您将使用您的对象名称而不是本指南中使用的语法来发出命令。换句话说,而不是发出命令:

$this->db->query();

$this->db->result();

等等……</p>

您将改为使用:

$DB1->查询();

$DB1->结果();

等等……</p>

于 2019-02-25T20:15:55.623 回答