CodeIgniter - вызов функции-члена select() для не-объекта

Я новичок в CodeIgniter. Это мой код:

class User_model extends CI_Model {

    function validate_user() {

        $this->db->select('*');
        $this->db->from('user');
        $this->db->where('username', $this->input->post('username'));
        $this->db->where('password', md5($this->input->post('password')));
        $validate_user = $this->db->get();

        if($validate_user->num_rows == 1) {
            return TRUE;
        }
    }
}

Я получаю эту ошибку в файле модели:

Call to a member function select() on a non-object

В настоящее время я использую CodeIgniter версии 2.1.0. Пожалуйста, помогите мне!

Ответ 1

Я думаю, что вам нужно загрузить библиотеку "база данных". Первый способ - включить "базу данных" в ваше приложение /config/autoload.php

$autoload['libraries'] = array('database', 'session');

или в конструкторе класса:

class User_model extends CI_Model { 

     public function __construct() 
     {
           parent::__construct(); 
           $this->load->database();
     }
}

Вы можете получить дополнительную информацию здесь: http://ellislab.com/codeigniter/user_guide/database/connecting.html

Ответ 2

Похоже, что вы не придерживаетесь шаблона MVC. Вы должны передавать данные из представления → контроллер → модель.

Что касается отправки информации в базу данных, я уверен, что CI обрабатывает входные данные xss и filter, но вы никогда не сможете быть уверенными.

Также убедитесь, что вы загружаете свои модели в файле config/autoload.php или запускаете модель в функции контроллера __construct()

<?php
    class User extends CI_Controller
    {
        public __construct()
        {
            parent::__construct();
            $this->load->model('User_model');
        }
    }

или

$autoload['model'] = array('User_model');

Так, например, в моем режиме просмотра я хотел бы, чтобы CI создавал необходимые поля.

<?php 
    echo form_open('admin');
    echo form_label('Username:', 'username');
    echo form_input('username', 'name');
    echo form_label('Password:', 'password');
    echo form_password('password');
    echo form_submit('submit', 'Login', 'id="loginBtn"'); ?>
    echo form_close(); 
?>

Теперь в контроллере

<?php
class User extends CI_Controller
{

    public function index()
    {

        $this->load->model('User_model');
        $result = $this
                    ->user_model
                    ->index(
                        $this->input->post('username'),
                        $this->input->post('password'));
    }

}
?>

И модель

<?php

class User_model extends CI_Model
{


    function index($username, $password)
    {
        $q = $this
                ->db
                ->where('username', $username)
                ->where('password', md5($password))
                ->limit(1)
                ->get('user');

        if ($q->num_rows() > 0) {
            return $q->row();
        }
    }
}

Ответ 3

num_rows - это функция, поэтому вам нужно добавить ()

if($validate_user->num_rows() == 1) {
        return TRUE;
}

Также вы вызываете конструктор родительского класса в конструкторе

class User_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }
}