Intereting Posts
Как изменить язык без перегрузки страницы с помощью PHP / JQuery Как использовать PHP Composer на HostGator Декларация, чтобы сделать PHP-скрипт полностью совместимым с Unicode PHP – не может использовать скаляр как предупреждение массива Автозаполнение JQuery UI не работает на IE10 Добавить прослушиватель событий для создания элемента, добавленного прослушивателем событий Установите переменную $ _SERVER при вызове PHP из командной строки? Firefox 13.0.1 заблокировал меня вне сеанса Оберните все <img> в <div>, возьмите атрибут alt и добавьте его в <p> внутри Запрос PHP и Mysql, используйте PHP для преобразования строк в столбцы Заменить несколько заполнителей PHP? «Индекс столбцов» на обработанной сервером DataTable Может ли FPDF / FPDI использовать PDF в альбомном формате в качестве шаблона? SOAP: Возвращение массива xsd: любые элементы в PHP ClassNotFoundException: Попытка загрузить класс «Mongo» из … (с сохранением) symfony2

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

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

Что я здесь делаю неправильно?

Solutions Collecting From Web of "Codeigniter – я ищу для использования / подключения к другой базе данных для одного из моих контроллеров и одной модели"

Ваша проблема здесь не в использовании функций базы данных 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); } }