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

Php Codeigniter-我希望为我的一个控制器和一个型号使用/连接到不同的数据库,php,codeigniter,Php,Codeigniter,我希望为我的一个控制器和一个型号使用/连接到另一个数据库。我在CI论坛上发布了这个消息,因为我没有得到任何回应 我在database.php中添加了以下内容: $db['tdb']['hostname'] = "localhost";//localhost $db['tdb']['username'] = "username";//root $db['tdb']['password'] = "password";//empty $db['tdb']['database'] = "datab

我希望为我的一个控制器和一个型号使用/连接到另一个数据库。我在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');

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

是否尝试在FInsert函数中加载$tdb?看起来$tdb可能是一个局部变量,FInsert无法访问…

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

您需要将$this->load->database()的结果存储在构造函数和方法都可用的位置。您可以将$this->load->database()调用移动到controller方法中,并在每次对模型调用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();
    }    
}

?>

希望有帮助


Jim。

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

您需要将$this->load->database()的结果存储在构造函数和方法都可用的位置。您可以将$this->load->database()调用移动到controller方法中,并在每次对模型调用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();
    }    
}

?>

希望有帮助


Jim.

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

class Tadmin_model extends Model {
    var $tdb;

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

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

class Tadmin_model extends Model {
    var $tdb;

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

jim,我仍然会遇到错误“调用非对象上的成员函数query()”,即使我已经从构造函数sope中生成了变量。请帮助。很抱歉,我发现了问题,我没有在加载数据库时包含第二个参数“TRUE”。感谢pal.jim,我仍然收到错误“调用非对象上的成员函数query()”,即使我已经从构造函数sope中生成了变量。请帮助。很抱歉,我发现了问题,我没有在加载数据库时包含第二个参数“TRUE”。谢谢你,朋友。