1

コントローラーの 1 つとモデル 1 つに対して、別のデータベースを使用/接続しようとしています。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 行の非オブジェクトに対するメンバー関数 query() の呼び出し ...

ここで何が間違っていますか?

4

3 に答える 3

5

ここでの問題は、CodeIgniter のデータベース関数を使用することではなく、クラスの変数スコープにあります。モデルをロードすると、データベースに接続され、結果がモデルのコンストラクターのローカル変数に割り当てられます。関数が終了すると、ローカル変数は破棄されます。後で、すでに破棄されている $tdb 変数で query() メソッドを呼び出そうとすると、エラーが発生します。

$this->load->database() の結果を、コンストラクターとメソッドの両方が利用できる場所に保存する必要があります。$this->load->database() 呼び出しをコントローラ メソッドに移動し、モデルで Tradmin メソッドを呼び出すたびに他のデータベースに接続できます。

モデル内のすべてのメソッドで $tdb を使用できるようにするもう 1 つの方法は、クラスでメンバー変数を使用することです。これは次のようになります。

<?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();
    }    
}

?>

それが役立つことを願っています。

ジム。

于 2008-12-05T03:18:04.317 に答える
0

FInsert 関数内で $tdb を読み込んでみましたか? $tdb はローカル変数であり、FInsert からアクセスできないようです...

于 2008-11-26T19:12:40.320 に答える
0

tdb は、コンストラクターのスコープ外、つまり次のようなクラス メンバーとして定義する必要があります。

class Tadmin_model extends Model {
    var $tdb;

    function Tadmin_model() {
        parent::Model();
        $this->tdb = $this->load->database('tdb', TRUE);            
    }
}
于 2010-02-08T20:23:58.843 に答える