Codeigniter动态数据库连接 [英] Codeigniter dynamic database connection

查看:73
本文介绍了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);

详情请看这里:
http://ellislab.com/codeigniter/user-guide/database/connecting.html


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: 12 An 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动态数据库连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆