Я хочу использовать / подключаться к другой базе данных для одного из моих контроллеров и одной модели. Я опубликовал это, потому что на форумах 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 on line …
Что я здесь делаю неправильно?
Ваша проблема здесь не в использовании функций базы данных 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(); } } ?>
Надеюсь, это поможет.
Джим.
Вы пытались загрузить $ tdb внутри функции FInsert? Похоже, $ tdb может быть локальной переменной и недоступен FInsert …
tdb необходимо определить вне области конструктора, т. е. как член класса, такой как:
class Tadmin_model extends Model { var $tdb; function Tadmin_model() { parent::Model(); $this->tdb = $this->load->database('tdb', TRUE); } }