CI连接多个数据库 怎么实现?--很着急。。。在线等。
本帖最后由 cmsphp 于 2010-11-23 11:11 编辑项目已经做好,目前所有程序都是利用默认连接的数据库
$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "123456";
$db['default']['database'] = "news";
$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";
现在要开发一个新程序要在这个框架上加一个数据库
就是怎么实现连接多个数据库
要实现的是默认不指定连接哪个数据库的时候连接的是news数据库
当需要连接新数据库的时候指定news_1
怎么写配置文件
怎么写模型和控制器
我的代码贴出来:
database.php
//默认的
$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "123456";
$db['default']['database'] = "news";
$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";
//新数据库
//默认的
$active_group = "baike";
$active_record = TRUE;
$db['baike']['hostname'] = "localhost";
$db['baike']['username'] = "root";
$db['baike']['password'] = "123456";
$db['baike']['database'] = "baike";
$db['baike']['dbdriver'] = "mysql";
$db['baike']['dbprefix'] = "";
$db['baike']['pconnect'] = TRUE;
$db['baike']['db_debug'] = FALSE ;
$db['baike']['cache_on'] = FALSE;
$db['baike']['cachedir'] = "";
$db['baike']['char_set'] = "utf8";
$db['baike']['dbcollat'] = "utf8_general_ci";
模型demo_model.php
<?php
class demo_model extends Model {
var $title = '';
var $content = '';
var $date = '';
function apidemo_modelmodel() {
// Call the Model constructor for PHP4
parent::Model ();
$DB1 = $this->load->database('default', TRUE);
$DB2 = $this->load->database('baike', TRUE);
}
//获取
function get_baike_info($id) {
$query = $DB2->query ( "SELECT * FROM web_baike");
return $query->row_array ();
}
//获取
function get_information_info($id) {
$query = $DB1->query ( "SELECT * FROM web_information ");
return $query->row_array ();
}
}
/* End of file api_model.php */
/* Location: /application/models/demo_model.php */
控制器ontrollers/demo.php
<?php
class demo extends Controller {
function demo() {
parent::Controller ();
$this->load->model ( 'demo_model' );
$this->load->helper ( array ('form', 'url', 'cookie' ) );
}
function index() {
$baike_info = $this->demo_model->get_baike_info ( 1 );
$information_info = $this->demo_model->get_information_info ( 1 );
print_r($baike_info);
print_r($information_info);
}
}
/* End of file index.php */
/* Location: /application/controllers/demo.php */
?>
报错信息:
Fatal error: Call to a member function query() on a non-object in \system\application\models\demo_model.php on line 17 唉,基础知识,变量作用域
你在function a()里面定义的$DB1,$DB2
在function b()里面是木有滴
要用$this->D ...
visvoy 发表于 2010-11-22 17:10 http://codeigniter.org.cn/forums/images/common/back.gif
Fatal error: Call to a member function query() on a non-object in system\application\models\demo_model.php on line 17 http://codeigniter.org.cn/user_guide/database/configuration.html
visvoy 发表于 2010-11-22 17:06 http://codeigniter.org.cn/forums/images/common/back.gif
大哥 我就是看了手册写的 还是有问题啊 唉,基础知识,变量作用域
你在function a()里面定义的$DB1,$DB2
在function b()里面是木有滴
要用$this->DB1=$this->load->xxx 回复 5# cmsphp
你这个确实是变量作用域问题,请不要定义成局部变量,而要定义成类属性。
请注意 http://codeigniter.org.cn/user_guide/database/connecting.html 里提到的一个注意事项:
译注:要连接多个数据库请先设置 config/database.php 中的 $db['xxxxxx']['pconnect'] = FALSE; 这是 mysql_pconnect() 造成的问题,和 CI 无关。
如果你都符合上面的条件,肯定是没问题的,这个都测试过了。 回复cmsphp
你这个确实是变量作用域问题,请不要定义成局部变量,而要定义成类属性。
请注意里 ...
Hex 发表于 2010-11-22 17:28 http://codeigniter.org.cn/forums/images/common/back.gif
可以给出一个演示系统代码吗? 回复 7# cmsphp
把你的 $DB 都改成 $this->DB 就 OK,替换就行。
然后注意要关闭 pconnect,这个很重要,这是 PHP 本身的问题,和 CI 无关。 本帖最后由 cmsphp 于 2010-11-23 11:09 编辑
回复cmsphp
把你的 $DB 都改成 $this->DB 就 OK,替换就行。
然后注意要关闭 pconnect,这个很重 ...
Hex 发表于 2010-11-22 20:08 http://codeigniter.org.cn/forums/images/common/back.gif
<?php
class demo_model extends Model {
var $title = '';
var $content = '';
var $date = '';
function apidemo_modelmodel() {
// Call the Model constructor for PHP4
parent::Model ();
$DB1 = $this->load->database('default', TRUE);
$DB2 = $this->load->database('baike', TRUE);
}
//获取
function get_baike_info($id) {
$query = $this->DB2->query ( "SELECT * FROM web_baike");
return $query->row_array ();
}
//获取
function get_information_info($id) {
$query = $this->DB1->query ( "SELECT * FROM web_information ");
return $query->row_array ();
}
}
/* End of file api_model.php */
/* Location: /application/models/demo_model.php */
//默认的
$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "123456";
$db['default']['database'] = "news";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = FALSE ;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
//新的
$active_group = "baike";
$active_record = TRUE;
$db['baike']['hostname'] = "localhost";
$db['baike']['username'] = "root";
$db['baike']['password'] = "123456";
$db['baike']['database'] = "baike";
$db['baike']['dbdriver'] = "mysql";
$db['baike']['dbprefix'] = "";
$db['baike']['pconnect'] = FALSE;
$db['baike']['db_debug'] = FALSE ;
$db['baike']['cache_on'] = FALSE;
$db['baike']['cachedir'] = "";
$db['baike']['char_set'] = "utf8";
$db['baike']['dbcollat'] = "utf8_general_ci";
还是报错
Fatal error: Call to a member function query() on a non-object insystem\application\models\demo_model.php on line 17 -_-
$DB1 = $this->load->database('default', TRUE);
$DB2 = $this->load->database('baike', TRUE);
这两句也要改。。。
建议好好看看 PHP 基本语法。
页:
[1]
2