【问题标题】:Codeigniter - I am looking to use/connect to a different database for one of my controllers and one modelCodeigniter - 我希望为我的一个控制器和一个模型使用/连接到不同的数据库
【发布时间】:2010-09-23 16:10:14
【问题描述】:

我希望为我的一个控制器和一个模型使用/连接到不同的数据库。我发布了这个消息,因为在 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

行号:...

致命错误:调用成员函数 query() 中的非对象 /blablabla/tadmin_model.php 上线 ...

我在这里做错了什么?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

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

    您需要将 $this->load->database() 的结果存储在构造函数和方法都可以使用的位置。您可以将 $this->load->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();
        }    
    }
    
    ?>
    

    希望对您有所帮助。

    吉姆。

    【讨论】:

    • jim,我仍然收到错误“调用非对象上的成员函数 query()”,即使我已经将变量从构造函数中取出。请帮忙。
    • 对不起,我发现了问题,我在加载数据库时没有包含第二个参数“TRUE”。谢谢朋友。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 2012-10-16
        • 2022-07-11
        • 2022-01-08
        • 2011-09-08
        相关资源
        最近更新 更多