Codeigniter - я ищу использовать / подключиться к другой базе данных для одного из моих контроллеров и одной модели - PullRequest
1 голос
/ 23 ноября 2008

Я хочу использовать / подключиться к другой базе данных для одного из моих контроллеров и одной модели. Я отправил это сообщение, так как на форумах 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 на линии ...

Что я здесь не так делаю?

Ответы [ 3 ]

5 голосов
/ 05 декабря 2008

Ваша проблема здесь не в использовании функций базы данных CodeIgniter, а в изменении области видимости в классах. Когда вы загружаете вашу модель, вы подключаетесь к базе данных и присваиваете результат локальной переменной в конструкторе модели. Когда любая функция завершается, локальные переменные отбрасываются. Позже вы попытаетесь вызвать метод query () для переменной $ tdb, которая уже была выброшена, и получите ошибку.

Вам необходимо сохранить результаты $ 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();
    }    
}

?>

Надеюсь, это поможет.

Джим.

0 голосов
/ 08 февраля 2010

tdb должен быть определен вне области видимости конструктора, то есть как член класса, такой как:

class Tadmin_model extends Model {
    var $tdb;

    function Tadmin_model() {
        parent::Model();
        $this->tdb = $this->load->database('tdb', TRUE);            
    }
}
0 голосов
/ 26 ноября 2008

Вы пытались загрузить $ tdb внутри функции FInsert? Похоже, $ tdb может быть локальной переменной и недоступен для FInsert ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...