Php Codeigniter动态数据库连接
我是php/OOP的初学者,对动态更改数据库连接有疑问 下面是my main.php的外观:Php Codeigniter动态数据库连接,php,mysql,database,codeigniter,dynamic,Php,Mysql,Database,Codeigniter,Dynamic,我是php/OOP的初学者,对动态更改数据库连接有疑问 下面是my main.php的外观: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Main extends CI_Controller { function __construct() { parent::__construct(); /* Standard Libraries of cod
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
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);
}
}
当我尝试登录时,我可以看到以下错误:
遇到一个PHP错误
严重性:通知
消息:未定义变量:connectdb
文件名:controllers/main.php
行号:12遇到错误
您尚未选择要连接的数据库类型
将$this->load->database($connectdb)
更改为default
,default1
,或default2
使其工作。如何将变量放入其中,以便连接参数根据登录用户的不同而变化
希望有人能帮忙,谢谢!
Eric您应该在
application/config/database.php´
通常,您会设置默认数据库组,如下所示:
$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['default']
的数组中提供
然后,您可以在一个新数组中添加另一个数据库——我们称之为“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\u other->foo()
你可以像这样把它扩展到多个组
$DB2 = $this->load->database('anotherdb1', TRUE);
$DB3 = $this->load->database('anotherdb2', TRUE);
有关详细信息,请参见:
您应该在
application/config/database.php´
通常,您会设置默认数据库组,如下所示:
$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['default']
的数组中提供
然后,您可以在一个新数组中添加另一个数据库——我们称之为“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\u other->foo()
你可以像这样把它扩展到多个组
$DB2 = $this->load->database('anotherdb1', TRUE);
$DB3 = $this->load->database('anotherdb2', TRUE);
有关详细信息,请参见:
问题是,在索引函数中设置的构造函数中加载此变量
\uu构造函数()在index()之前被激发,所以我想你应该这样做:
class Main extends CI_Controller {
private $connectdb;
function __construct()
{
parent::__construct();
/* Standard Libraries of codeigniter are required */
$this->_setConnectdb();
$this->load->database($this->connectdb);
$this->load->helper('url');
$this->load->library('grocery_CRUD');
}
public function _setConnectdb()
{
if ( $_POST["username"] == "root" ) {
$this->connectdb = "default";
}
if ( $_POST["username"] == "user1" ) {
$this->connectdb = "default1";
}
if ( $_POST["username"] == "user2" ) {
$this->connectdb = "default2";
}
问题是,在索引函数中设置的构造函数中加载此变量
\uu构造函数()在index()之前被激发,所以我想你应该这样做:
class Main extends CI_Controller {
private $connectdb;
function __construct()
{
parent::__construct();
/* Standard Libraries of codeigniter are required */
$this->_setConnectdb();
$this->load->database($this->connectdb);
$this->load->helper('url');
$this->load->library('grocery_CRUD');
}
public function _setConnectdb()
{
if ( $_POST["username"] == "root" ) {
$this->connectdb = "default";
}
if ( $_POST["username"] == "user1" ) {
$this->connectdb = "default1";
}
if ( $_POST["username"] == "user2" ) {
$this->connectdb = "default2";
}
我只有一个数据库和多个表。似乎上面的内容只适用于不同的数据库。有没有办法在main.php中动态更改数据库连接?我只有一个数据库和多个表。似乎上面的内容只适用于不同的数据库。是否有一种方法可以动态更改main.php中的数据库连接?如果要使用codeigniter,请先阅读一些手册…如果要使用codeigniter,请先阅读一些手册。。。