当我加载模型以在codeigniter中运行sql文件时。我收到一个错误,说没有选择数据库,但有。单击我的按钮进入下一阶段时会发生错误。它有些如何在加载sql之前首先加载数据库。不确定如何使其发挥作用。
如果我刷新它加载的页面。只要点击按钮
,就不应该刷新页面错误
Error Number: 1046
No database selected
CREATE TABLE `country` ( `country_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(128) NOT NULL, `iso_code_2` varchar(2) NOT NULL, `iso_code_3` varchar(3) NOT NULL, `address_format` text NOT NULL, `postcode_required` tinyint(1) NOT NULL, `status` tinyint(1) NOT NULL DEFAULT ‘1’, PRIMARY KEY (`country_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
Filename: C:\xampp\htdocs\codeigniter\system\database\DB_driver.php
Line Number: 330
在控制器上
$data['button_continue'] = $this->lang->line('button_continue');
$data['button_back'] = $this->lang->line('button_back');
if ($this->form_validation->run() == false) {
$this->load->view('template/step_3', $data);
} else {
$this->load->model('install/model_install');
$this->model_install->database_install();
$this->model_install->database_connect();
$this->model_install->dump_sql();
redirect('step_4');
}
模型
public function dump_sql() {
$file = APPPATH . 'modules/install/config/database.sql';
if (!file_exists($file)) {
exit('Could not load sql file: ' . $file);
}
$lines = file($file);
if ($lines) {
$sql = '';
foreach($lines as $line) {
if ($line && (substr($line, 0, 2) != '--') && (substr($line, 0, 1) != '#')) {
$sql .= $line;
if (preg_match('/;\s*$/', $line)) {
$sql = str_replace("DROP TABLE IF EXISTS `", "DROP TABLE IF EXISTS `" . $this->input->post('dbprefix'), $sql);
$sql = str_replace("CREATE TABLE IF NOT EXISTS `", "CREATE TABLE IF NOT EXISTS `" . $this->input->post('dbprefix'), $sql);
$sql = str_replace("CREATE TABLE `", "CREATE TABLE `" . $this->input->post('dbprefix'), $sql);
$sql = str_replace("INSERT INTO `", "INSERT INTO `" . $this->input->post('dbprefix'), $sql);
$this->db->query($sql);
$sql = '';
}
}
}
}
}
答案 0 :(得分:0)
在创建表之前,您需要告诉MySQL使用哪个数据库。 这里有一个类似的问题:Error 1046 No database Selected, how to resolve?
答案 1 :(得分:0)
我已经解决了自己的问题。在做了一些研究之后,我发现我遇到问题的原因是因为我在自动加载时设置了数据库。
在我的控制器中修复问题我添加了$ this-> load->数据库并包含了我的sql模型函数。
这种方式现在加载我的sql文件所以现在全部解决了。
在我的控制器功能索引()
上if ($this->form_validation->run() == false) {
$this->load->view('template/step_3', $data);
} else {
$this->load->model('install/model_install');
$this->model_install->database_install();
if($this->load->database()) {
$this->model_install->dump_sql();
redirect('step_4');
} else {
echo "Could Not Load SQL File"; die;
}
}
在我的模型上
public function dump_sql() {
$file = APPPATH . 'modules/install/config/database.sql';
if (!file_exists($file)) {
exit('Could not load sql file: ' . $file);
}
$lines = file($file);
if ($lines) {
$sql = '';
foreach($lines as $line) {
if ($line && (substr($line, 0, 2) != '--') && (substr($line, 0, 1) != '#')) {
$sql .= $line;
if (preg_match('/;\s*$/', $line)) {
$sql = str_replace("DROP TABLE IF EXISTS `", "DROP TABLE IF EXISTS `" . $this->input->post('dbprefix'), $sql);
$sql = str_replace("CREATE TABLE IF NOT EXISTS `", "CREATE TABLE IF NOT EXISTS `" . $this->input->post('dbprefix'), $sql);
$sql = str_replace("CREATE TABLE `", "CREATE TABLE `" . $this->input->post('dbprefix'), $sql);
$sql = str_replace("INSERT INTO `", "INSERT INTO `" . $this->input->post('dbprefix'), $sql);
$this->db->query($sql);
$sql = '';
}
}
}
}
}
答案 2 :(得分:0)
由于在您的代码上使用dsn数据库格式,会发生此错误。当没有正确指定dsn时我遇到了这样的错误我的意思是:如果你使用pdo驱动程序并连接到mysql数据库,那么dsn将是:
$db['bank_sys'] = array(
'dsn' => 'mysql:hostname=localhost;dbname=dba_bank_sys',
dbname是在引用mysql时使用的,但是你使用像sqlsrv这样的东西作为你的驱动程序,那么teh dsn将会改变
$db['bank_sys'] = array(
'dsn' => 'sqlsrv:hostname=localhost;database=dba_bank_sys',
答案 3 :(得分:0)
确保在application / config / database.php中设置了数据库设置
$db['default'] = array('hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'your_database_name',
如果您在本地运行,则上述设置正常。
答案 4 :(得分:-1)
这不是你的代码的问题。
您只需在数据库中添加数据库名称即可解决此数据库错误。for {
rollNo <- getStudentRoolNo(name)
rankFuture = getRank(rollNo)
detailsFuture = getDetails(rollNo)
rank <- rankFuture
details <- detailsFuture
} yield (rank + details)
- 代码类似于此(C:\wamp\www\codeigniter\application\config)
你还应该再做一件事来解决这个错误在“autoload.php”中添加另一行。 $db['default']['database'] = 'databasename';
- 代码类似于此(C:\wamp\www\codeigniter\application\config)