Я новичок в codeigniter, и я разработал код для выполнения запросов в базе данных. Я загружаю базу данных с помощью $this->load->database();
и выполнить запрос, но когда я запускаю код, браузер дает мне следующее сообщение об ошибке:
A PHP Error was encountered Severity: Notice Message: Undefined property: Tutorial::$load. Fatal error: Call to a member function database() on a non-object
Это код, который я использую:
class Tutorial extends CI_Controller { public function tutorial() { $this->load->database(); $query = $this->db->query('SELECT user,pass,email FROM tablex'); foreach ($query->result() as $row) { echo $row->title; echo $row->name; }
Я уверен, что переменные $db
в моем файле конфигурации базы данных установлены правильно, и я даже попробовал автозагрузку базы данных для всех страниц в файле конфигурации autoload.php; все еще имея ту же проблему. Любые идеи, как это сделать?
+ Изменить
$this->load->database();
в
$this->load->library('database');
база данных не является прямым методом. Это библиотека в кодеигнитре, и вам нужно загрузить ее как библиотеку.
Вы также можете автозагрузить библиотеку database
в autoload.php
.
ОБНОВИТЬ:
Вы используете одно и то же имя для своего класса и метода. В PHP4 метод, который имеет то же имя, что и имя класса, рассматривался как конструктор, но если вы используете codeigniter 2+, вам нужно использовать конструктор PHP5, который
function __construct() { parent::__construct(); /*Additional code which you want to run automatically in every function call */ }
Вы не можете присвоить методу имя с именем класса в Codeigniter 2+. Измените метод на что-нибудь еще. Вы можете указать index
метода, если хотите, чтобы он загружался по умолчанию.
Это должно решить вашу проблему.
Руководство пользователя CodeIgniter, Создание разделов библиотек :
Для доступа к собственным ресурсам CodeIgniter в вашей библиотеке используйте функцию get_instance () . Эта функция возвращает суперъект CodeIgniter. Обычно из функций контроллера вы вызываете любую из доступных функций CodeIgniter, используя конструкцию $ this .
$ this , однако, работает только внутри ваших контроллеров, ваших моделей или ваших просмотров. Если вы хотите использовать классы CodeIgniter из своих собственных пользовательских классов, вы можете сделать это следующим образом:
Сначала назначьте объект CodeIgniter переменной:
$CI =& get_instance();
Когда вы назначили объект переменной, вы будете использовать эту переменную вместо $ this :
$CI =& get_instance(); $CI->load->helper('url'); $CI->load->library('session'); $CI->config->item('base_url'); etc.
Надеюсь это поможет. Вы также можете поместить $ CI в конструктор.
Ваш код будет выглядеть примерно так:
class Tutorial { public $CI; /** * Constructor. */ public function __construct() { if (!isset($this->CI)) { $this->CI =& get_instance(); } $this->CI->load->database(); } }