Codeigniter - Ben kullanmak için arıyorum / benim denetleyicileri biri ve bir model için farklı bir veritabanına bağlanmak

3 Cevap php

Benim denetleyicileri ve bir model için farklı bir veritabanına bağlanmak / kullanmak için arıyorum. Ben CI forumlarda hiçbir yanıt alıyorum çünkü bu duymak yayınlanmıştır.

Ben database.php bu ekledi:

$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";

Bu benim model olarak:

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

?>

Ve bu benim kontrolörün başlangıç:

<?php

class Tadmin extends Controller{

    function Tradmin(){

        parent::Controller();

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

Ve bu hatayı alıyorum:

Bir PHP hata ile karşılaşıldı

Önem: Bildirimi

Mesaj: Undefined variable: tdb

Dosya Adı: modelleri / tadmin_model.php

Satır Sayısı: ...

Fatal error: Call to a member function query() on a non-object in /blablabla/tadmin_model.php on line ...

Ben burada yanlış ne yapıyorum?

3 Cevap

Burada sorun CodeIgniter'ın veritabanı fonksiyonları kullanımı ile değil, sınıflar değişken kapsam belirleme ile değildir. Eğer modeli yüklenemedi zaman veritabanına bağlanmak ve modelin yapıcısı yerel değişkene sonucu atıyorsanız. Herhangi bir fonksiyon tamamlandığında, yerel değişkenler atılır. Daha sonra zaten çöpe atılmış $ tdb değişkeni üzerinde sorgu () yöntemini çağırın ve bir hata almaya çalışın.

Sen yapıcı ve yöntemi hem de kullanılabilir bir yere $ this-> load-> veritabanı sonuçları () saklamak gerekir. Bu-> load-> veritabanı () denetleyicisi yöntemi çağırmak ve diğer veritabanına sizin model üzerinde Tradmin yöntem aramak bağlamak her zaman $ hareket olabilir.

Eğer modelde tüm yöntemler kullanılabilir $ TDB yapmak istiyorsa, diğer yolu, bu gibi görünecektir sınıf bir üye değişkeni kullanmaktır ....

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

?>

Umut olur.

Jim.

Eğer FInsert işlev içinde yükleniyor $ TDB denediniz mi? $ Tdb yerel bir değişken ve FInsert tarafından erişilebilir olmayabilir gibi görünüyor ...

tdb gibi sınıf üyesi olarak yani yapıcı kapsamı dışında tanımlanmış olması gerekir:

class Tadmin_model extends Model {
    var $tdb;

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