Codeigniter - 我希望使用/连接到我的一个控制器和一个模型的不同数据库

时间:2008-11-23 13:22:45

标签: php codeigniter

我希望使用/连接到我的一个控制器和一个模型的不同数据库。我发布此消息,因为在CI的论坛上我没有得到回复。

我在database.php中添加了这个:

$db['tdb']['hostname'] = "localhost";//localhost

$db['tdb']['username'] = "username";//root

$db['tdb']['password'] = "password";//empty

$db['tdb']['database'] = "databasename";

$db['tdb']['dbdriver'] = "mysql";

$db['tdb']['dbprefix'] = "";

$db['tdb']['pconnect'] = FALSE;

$db['tdb']['db_debug'] = FALSE;

$db['tdb']['cache_on'] = FALSE;

$db['tdb']['cachedir'] = "";

$db['tdb']['char_set'] = "utf8";

$db['tdb']['dbcollat'] = "utf8_general_ci";

这是我的模特:

<?php

class Tadmin_model extends Model{

    function Tadmin_model(){

        parent::Model();

        $tdb = $this->load->database('tdb', TRUE);            
    }

    function FInsert($usernames){

        $query = $tdb->query("SELECT * FROM following");

        return $query->row();
    }    
}

?>

这是我的控制器的开始:

<?php

class Tadmin extends Controller{

    function Tradmin(){

        parent::Controller();

        $this->load->model('tadmin_model');

我收到了这个错误:

  

遇到PHP错误

     

严重性:注意

     

消息:未定义的变量:tdb

     

文件名:models / tadmin_model.php

     

行号:...

     

致命错误:调用成员函数   查询()在非对象中   /blablabla/tadmin_model.php在线   ...

我在这里做错了什么?

3 个答案:

答案 0 :(得分:5)

这里的问题不是使用CodeIgniter的数据库函数,而是使用类中的变量作用域。加载模型时,您将连接到数据库并将结果分配给模型构造函数中的局部变量。当任何函数完成时,将丢弃局部变量。稍后您尝试在$ tdb变量上调用query()方法,该变量已被丢弃并出现错误。

您需要将$ this-&gt; load-&gt; database()的结果存储在构造函数和方法都可用的位置。您可以将$ this-&gt; load-&gt; database()调用移动到控制器方法中,并在每次在模型上调用Tradmin方法时连接到其他数据库。

另一种方法,如果你想让$ tdb可用于模型中的所有方法,那就是在类上使用一个成员变量,它看起来像这样....

<?php

class Tadmin_model extends Model{
    var $tdb;

    function Tadmin_model(){

        parent::Model();

        $this->tdb = $this->load->database('tdb', TRUE);            
    }

    function FInsert($usernames){

        $query = $this->tdb->query("SELECT * FROM following");

        return $query->row();
    }    
}

?>

希望有所帮助。

吉姆。

答案 1 :(得分:0)

您是否尝试在FInsert函数中加载$ tdb?看起来$ tdb可能是一个局部变量,FInsert ...

无法访问

答案 2 :(得分:0)

tdb需要在构造函数范围之外定义,即类成员如:

class Tadmin_model extends Model {
    var $tdb;

    function Tadmin_model() {
        parent::Model();
        $this->tdb = $this->load->database('tdb', TRUE);            
    }
}