2016-06-24 3 views
2

Я думаю, что не удается связаться с базой данных, и я не знаю почему.Codeigniter 3 Неустранимая ошибка: вызов в базу данных функции участника() по нуле

Я просмотрел stackoverflow и нашел следующие вопросы: here, и это не помогает мне в решении моей проблемы.

Я прочитал документацию от Codeigniter 3: here и воспользовался опцией Ручное подключение.

Мой класс от моего контроллера приложения выглядит так:

class home extends CI_Controller { 

    /** 
    * Class constructor 
    * Load database lib 
    */ 
    public function __construct() 
    { 
      $this->load->database(); 

    } 

    /** 
    * Index Page for this controller. 
    * 
    * Maps to the following URL 
    *  http://example.com/home.php/welcome 
    * - or - 
    *  http://example.com/home.php/welcome/index 
    */ 
    public function index() 
    { 
     $query = $this->db->get('users'); 

     foreach ($query->result() as $row) 
     { 
      var_dump($row->fullName); //testing purpose 
     } 

     //$this->load->view('home', $data); 

    } 

В базе данных конфигурации из моего приложения выглядит так:

$active_group = 'default'; 
$query_builder = TRUE; 

$db['default'] = array(
    'dsn'  => '', 
    'hostname' => 'localhost', 
    'username' => 'user', 
    'password' => 'password', 
    'database' => 'tasks', 
    'dbdriver' => 'mysqli', 
    'dbprefix' => '', 
    'pconnect' => FALSE, 
    'db_debug' => (ENVIRONMENT !== 'production'), 
    'cache_on' => FALSE, 
    'cachedir' => '', 
    'char_set' => 'utf8', 
    'dbcollat' => 'utf8_general_ci', 
    'swap_pre' => '', 
    'encrypt' => FALSE, 
    'compress' => FALSE, 
    'stricton' => FALSE, 
    'failover' => array(), 
    'save_queries' => FALSE 
); 

И когда я достигаю http://localhost/home.php/welcome

Я получаю это ошибка:

Fatal error: Call to a member function database() on null in \www\task\application\controllers\home.php on line 12

Я пробовал var_dump ($ this-> load), и это пустой, и отсюда мое предположение, что он не может установить соединение с базой данных.

ответ

3

Поскольку вы расширяете класс CI_Controller и решили перегрузить метод __construct, вам нужно просто вызвать родительскую конструкцию, прежде чем вы сможете начать использовать основные функции CI.

class home extends CI_Controller 
{ 
    public function __construct() 
    { 
     // $this->load does not exist until after you call this 
     parent::__construct(); // Construct CI's core so that you can use it 

     $this->load->database(); 
    } 
} 

Для получения дополнительной информации см. http://www.codeigniter.com/user_guide/general/controllers.html#class-constructors.

+0

oO, да, я только что нашел это после вашего руководства. ** Вместо того, чтобы писать операции с базой данных прямо в контроллере, запросы должны быть помещены в модель, поэтому их можно будет повторно использовать позже. ** Спасибо. – Starlays

+2

@Starlays Добро пожаловать. Да, обычно запросы должны быть помещены в модель при использовании архитектуры MVC. – MonkeyZeus

0

В моем случае принятое решение не решило проблему.

Я решил с:

$CI =& get_instance();//Put this before call $this-> 

Теперь вместо вызова $ this->, используйте $ CI-> вместо этого.