错误号码:1046未选择数据库 - CodeIgniter

时间:2014-05-24 07:48:07

标签: php mysql codeigniter

当我加载模型以在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 = '';
                }
            }
        }
        }
    }       

5 个答案:

答案 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)