Я пытаюсь написать сценарий в CodeIgniter, который создаст базу данных, а затем добавит таблицы в эту недавно созданную базу данных вместе с различными полями в новую таблицу.
Пока у меня есть dbforge для создания новой базы данных, но поскольку я использую библиотеку базы данных и имею предварительно установленные значения подключения к базе данных, когда она идет на создание таблицы, она помещает ее в предварительно выбранную базу данных, а не тот, который он только что создал.
В файле конфигурации database.php у меня есть следующее:
$db['default']['database'] = 'db1';
Если для создания новой базы данных я использую следующую команду:
$this->dbforge->create_database('db2');
'db2' будет создан, но затем следующая команда помещает таблицу в 'db1'.
$this->dbforge->create_table('table1');
Мне нужна 'table1', созданная в 'db2'. Как мне получить CI для выбора вновь созданной базы данных ('db2') для создания таблицы в нужном месте, а затем вернуться к 'db1'?
Я рассмотрел следующий вопрос, который похож на то, что я делаю, но я не хочу добавлять какие-либо дополнительные записи в database.php
Ошибка Codeigniter: нет выбранной базы данных
Любая помощь ценится!
EDIT – я должен добавить, что в базе данных create_database может быть любое имя для имени базы данных … Это скрипт для автоматического создания базы данных и соответствующих таблиц, где имя базы данных извлекается из формы.
$this->db->query('use db2'); $this->db->query('use DB1');
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; } } }
поскольку ваша база данных по умолчанию в конфигурации – 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. Подключение базы данных.
изменить соединение с базой данных миграции кода
Я использовал предложение, приведенное в вышеупомянутом вопросе, чтобы решить мою проблему. После создания второй базы данных я использовал следующую команду для ее переключения:
$this->db->query('use db2');
Это позволяет мне создавать таблицы в db2. Затем для возврата к базе данных по умолчанию использовалось следующее:
$this->db->query('use DB1');
Работает именно так, как я этого хочу.