cmsphp 发表于 2010-11-22 17:00:48

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

cmsphp 发表于 2010-11-22 17:13:14

唉,基础知识,变量作用域
你在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

visvoy 发表于 2010-11-22 17:06:37

http://codeigniter.org.cn/user_guide/database/configuration.html

cmsphp 发表于 2010-11-22 17:08:10


visvoy 发表于 2010-11-22 17:06 http://codeigniter.org.cn/forums/images/common/back.gif


    大哥 我就是看了手册写的 还是有问题啊

visvoy 发表于 2010-11-22 17:10:15

唉,基础知识,变量作用域
你在function a()里面定义的$DB1,$DB2
在function b()里面是木有滴
要用$this->DB1=$this->load->xxx

Hex 发表于 2010-11-22 17:28:06

回复 5# cmsphp


    你这个确实是变量作用域问题,请不要定义成局部变量,而要定义成类属性。
请注意 http://codeigniter.org.cn/user_guide/database/connecting.html 里提到的一个注意事项:
译注:要连接多个数据库请先设置 config/database.php 中的 $db['xxxxxx']['pconnect'] = FALSE; 这是 mysql_pconnect() 造成的问题,和 CI 无关。
如果你都符合上面的条件,肯定是没问题的,这个都测试过了。

cmsphp 发表于 2010-11-22 17:40:10

回复cmsphp


    你这个确实是变量作用域问题,请不要定义成局部变量,而要定义成类属性。
请注意里 ...
Hex 发表于 2010-11-22 17:28 http://codeigniter.org.cn/forums/images/common/back.gif


可以给出一个演示系统代码吗?

Hex 发表于 2010-11-22 20:08:34

回复 7# cmsphp


    把你的 $DB 都改成 $this->DB 就 OK,替换就行。
然后注意要关闭 pconnect,这个很重要,这是 PHP 本身的问题,和 CI 无关。

cmsphp 发表于 2010-11-23 11:08:26

本帖最后由 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

Hex 发表于 2010-11-23 11:24:50

-_-
$DB1 = $this->load->database('default', TRUE);
$DB2 = $this->load->database('baike', TRUE);
这两句也要改。。。
建议好好看看 PHP 基本语法。
页: [1] 2
查看完整版本: CI连接多个数据库 怎么实现?--很着急。。。在线等。