本文介绍了Codeigniter动态数据库连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



这是我的main.php看起来像:



class Main extends CI_Controller {

  function __construct()
{

parent :: __ construct();

/ *需要标准代码符号库* /
$ this-> load-> database($ connectdb);
$ this-> load-> helper('url');
$ this-> load-> library('grocery_CRUD');
}

public function index()
{


if($ _POST [username] ==root)
{
$ connectdb =default;
}


if($ _POST [username] ==user1)
{
$ connectdb =default1;
}

if($ _POST [username] ==user2)
{
$ connectdb =default2;
}


$ connect = @mysql_connect(localhost,$ _POST [username],$ _POST [password]);警告(如果有)。
if(!$ connect)
{
echo'服务器错误。请稍后再试。 CON';
} else {
print(< a href = \http://v-admindb/ci/index.php/main/employees?username =。$ _ POST [username ]。\> Employees< / a>);
echo< br>;
print(< a href = \http://v-admindb/ci/index.php/main/visitors?username =。$ _ POST [username]。\> ; Visitors< / a>);
} //只是一个例子来确保我们进入函数
// LOAD LIBRARIES
}

public function employees()
{
$ this-> grocery_crud-> set_table('employees');
$ output = $ this-> grocery_crud-> render();
$ this-> _example_output($ output);
}

public function visitor()
{
$ this-> grocery_crud-> set_table('visitors'
$ output = $ this-> grocery_crud-> render();
$ this-> _example_output($ output);
}


function _example_output($ output = null)

{
$ this-> load-& our_template.php',$ output);
}

}



这是我的database.php:

  $ db ['default'] ['hostname'] ='localhost'; 
$ db ['default'] ['username'] ='root';
$ db ['default'] ['password'] ='root';
$ db ['default'] ['database'] ='my_new_cms';
$ db ['default'] ['dbdriver'] ='mysql';
$ db ['default'] ['dbprefix'] ='';
$ db ['default'] ['pconnect'] = TRUE;
$ db ['default'] ['db_debug'] = TRUE;
$ db ['default'] ['cache_on'] = FALSE;
$ db ['default'] ['cachedir'] ='';
$ db ['default'] ['char_set'] ='utf8';
$ db ['default'] ['dbcollat​​'] ='utf8_general_ci';
$ db ['default'] ['swap_pre'] ='';
$ db ['default'] ['autoinit'] = TRUE;
$ db ['default'] ['stricton'] = FALSE;


//用于user1的连接
$ db ['default1'] ['hostname'] ='localhost';
$ db ['default1'] ['username'] ='user1';
$ db ['default1'] ['password'] ='user1';
$ db ['default1'] ['database'] ='my_new_cms';
$ db ['default1'] ['dbdriver'] ='mysql';
$ db ['default1'] ['dbprefix'] ='';
$ db ['default1'] ['pconnect'] = TRUE;
$ db ['default1'] ['db_debug'] = TRUE;
$ db ['default1'] ['cache_on'] = FALSE;
$ db ['default1'] ['cachedir'] ='';
$ db ['default1'] ['char_set'] ='utf8';
$ db ['default1'] ['dbcollat​​'] ='utf8_general_ci';
$ db ['default1'] ['swap_pre'] ='';
$ db ['default1'] ['autoinit'] = TRUE;
$ db ['default1'] ['stricton'] = FALSE;


//用于user2的连接
$ db ['default2'] ['hostname'] ='localhost';
$ db ['default2'] ['username'] ='user2';
$ db ['default2'] ['password'] ='user2';
$ db ['default2'] ['database'] ='my_new_cms';
$ db ['default2'] ['dbdriver'] ='mysql';
$ db ['default2'] ['dbprefix'] ='';
$ db ['default2'] ['pconnect'] = TRUE;
$ db ['default2'] ['db_debug'] = TRUE;
$ db ['default2'] ['cache_on'] = FALSE;
$ db ['default2'] ['cachedir'] ='';
$ db ['default2'] ['char_set'] ='utf8';
$ db ['default2'] ['dbcollat​​'] ='utf8_general_ci';
$ db ['default2'] ['swap_pre'] ='';
$ db ['default2'] ['autoinit'] = TRUE;
$ db ['default2'] ['stricton'] = FALSE;

当我尝试登录时,我可以这个错误:



遇到PHP错误



严重性:注意



消息:未定义的变量:connectdb

文件名:controllers / main.php



行号:12
遇到错误



您尚未选择要连接的数据库类型。



更改$ this-> load-> database )设置为'default','default1'或'default2'使它工作。如何在那里放置一个变量,使连接参数根据谁在登录更改?



希望有人可以帮助,谢谢!
Eric

解决方案

您应该在 application / config / database中提供所有数据库信息。通常,您将设置默认数据库组,如下所示:

pre> $ db ['default'] ['hostname'] =localhost;
$ db ['default'] ['username'] =root;
$ db ['default'] ['password'] =;
$ db ['default'] ['database'] =database_name;
$ db ['default'] ['dbdriver'] =mysql;
$ db ['default'] ['dbprefix'] =;
$ db ['default'] ['pconnect'] = TRUE;
$ db ['default'] ['db_debug'] = FALSE;
$ db ['default'] ['cache_on'] = FALSE;
$ db ['default'] ['cachedir'] =;
$ db ['default'] ['char_set'] =utf8;
$ db ['default'] ['dbcollat​​'] =utf8_general_ci;
$ db ['default'] ['swap_pre'] =;
$ db ['default'] ['autoinit'] = TRUE;
$ db ['default'] ['stricton'] = FALSE;

请注意,登录信息和设置在名为 $ db



您可以在新数组中添加另一个数据库 - 我们称之为anotherdb。

  $ db ['anotherdb'] ['hostname'] =localhost; 
$ db ['anotherdb'] ['username'] =root;
$ db ['anotherdb'] ['password'] =;
$ db ['anotherdb'] ['database'] =another_database_name;
$ db ['anotherdb'] ['dbdriver'] =mysql;
$ db ['anotherdb'] ['dbprefix'] =;
$ db ['anotherdb'] ['pconnect'] = TRUE;
$ db ['anotherdb'] ['db_debug'] = FALSE;
$ db ['anotherdb'] ['cache_on'] = FALSE;
$ db ['anotherdb'] ['cachedir'] =;
$ db ['anotherdb'] ['char_set'] =utf8;
$ db ['anotherdb'] ['dbcollat​​'] =utf8_general_ci;
$ db ['anotherdb'] ['swap_pre'] =;
$ db ['anotherdb'] ['autoinit'] = TRUE;
$ db ['anotherdb'] ['stricton'] = FALSE;

现在如果你想使用第二个数据库,只需去

  $ DB_another = $ this-> load-> database('anotherdb',TRUE); 

,而不是 $ this-> db-> foo (),您将 $ DB_another-> foo()



  $ DB2 = $ this-> load-> database('anotherdb1' ,TRUE); 
$ DB3 = $ this-> load-> database('anotherdb2',TRUE);

详情请看这里:


I am a beginner at php/OOP and have a question about dynamically changing my database connection.

Here is what my main.php looks like:

class Main extends CI_Controller {

function __construct()
{

    parent::__construct();

    /* Standard Libraries of codeigniter are required */
    $this->load->database($connectdb);
    $this->load->helper('url');
    $this->load->library('grocery_CRUD');
}

public function index()
{


            if ($_POST["username"] == "root")
                    {
                            $connectdb="default";
                    }


                    if ($_POST["username"] == "user1")
                    {
                            $connectdb="default1";
                    }

            if ($_POST["username"] == "user2")
                    {
                            $connectdb="default2";
                    }


    $connect = @mysql_connect("localhost", $_POST["username"], $_POST["password"]);//won't display the warning if any.
    if (!$connect)
    {
            echo 'Server error. Please try again sometime. CON';
    }else{
            print("<a href=\"http://v-admindb/ci/index.php/main/employees?username=".$_POST["username"]."\">Employees</a>");
            echo "<br>";
            print("<a href=\"http://v-admindb/ci/index.php/main/visitors?username=".$_POST["username"]."\">Visitors</a>");
    }//Just an example to ensure that we get into the function
// LOAD LIBRARIES
}

public function employees()
{
    $this->grocery_crud->set_table('employees');
    $output = $this->grocery_crud->render();
    $this->_example_output($output);
}

public function visitors()
{
    $this->grocery_crud->set_table('visitors');
    $output = $this->grocery_crud->render();
    $this->_example_output($output);
}


function _example_output($output = null)

{
    $this->load->view('our_template.php',$output);
}

}

Here is my database.php:

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'root';
$db['default']['database'] = 'my_new_cms';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;


//CONNECTION FOR user1
$db['default1']['hostname'] = 'localhost';
$db['default1']['username'] = 'user1';
$db['default1']['password'] = 'user1';
$db['default1']['database'] = 'my_new_cms';
$db['default1']['dbdriver'] = 'mysql';
$db['default1']['dbprefix'] = '';
$db['default1']['pconnect'] = TRUE;
$db['default1']['db_debug'] = TRUE;
$db['default1']['cache_on'] = FALSE;
$db['default1']['cachedir'] = '';
$db['default1']['char_set'] = 'utf8';
$db['default1']['dbcollat'] = 'utf8_general_ci';
$db['default1']['swap_pre'] = '';
$db['default1']['autoinit'] = TRUE;
$db['default1']['stricton'] = FALSE;


//CONNECTION FOR user2
$db['default2']['hostname'] = 'localhost';
$db['default2']['username'] = 'user2';
$db['default2']['password'] = 'user2';
$db['default2']['database'] = 'my_new_cms';
$db['default2']['dbdriver'] = 'mysql';
$db['default2']['dbprefix'] = '';
$db['default2']['pconnect'] = TRUE;
$db['default2']['db_debug'] = TRUE;
$db['default2']['cache_on'] = FALSE;
$db['default2']['cachedir'] = '';
$db['default2']['char_set'] = 'utf8';
$db['default2']['dbcollat'] = 'utf8_general_ci';
$db['default2']['swap_pre'] = '';
$db['default2']['autoinit'] = TRUE;
$db['default2']['stricton'] = FALSE;

When I try logging in I can this error:

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: connectdb

Filename: controllers/main.php

Line Number: 12An Error Was Encountered

You have not selected a database type to connect to.

Changing $this->load->database($connectdb) to 'default', 'default1', or 'default2' makes it work. How do I put a variable in there so that the connect parameters change depending on who is logging in?

Hopefully someone can help, thanks!Eric

解决方案

You should provide the all database information in application/config/database.php´

Normally, you would set the default database group, like so:

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Notice that the login information and settings are provided in the array named $db['default'].

You can then add another database in a new array - let's call it 'anotherdb'.

$db['anotherdb']['hostname'] = "localhost";
$db['anotherdb']['username'] = "root";
$db['anotherdb']['password'] = "";
$db['anotherdb']['database'] = "another_database_name";
$db['anotherdb']['dbdriver'] = "mysql";
$db['anotherdb']['dbprefix'] = "";
$db['anotherdb']['pconnect'] = TRUE;
$db['anotherdb']['db_debug'] = FALSE;
$db['anotherdb']['cache_on'] = FALSE;
$db['anotherdb']['cachedir'] = "";
$db['anotherdb']['char_set'] = "utf8";
$db['anotherdb']['dbcollat'] = "utf8_general_ci";
$db['anotherdb']['swap_pre'] = "";
$db['anotherdb']['autoinit'] = TRUE;
$db['anotherdb']['stricton'] = FALSE;

Now if you want to use the second database, just go

$DB_another = $this->load->database('anotherdb', TRUE);

and then, instead of $this->db->foo() , you will you $DB_another->foo()

and you can extend this to multiple groups like this

 $DB2 = $this->load->database('anotherdb1', TRUE);
 $DB3 = $this->load->database('anotherdb2', TRUE);

For details have a look here:http://ellislab.com/codeigniter/user-guide/database/connecting.html

这篇关于Codeigniter动态数据库连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 19:56