【问题标题】:Fatal error: Call to a member function where() on a non-object codeigniter $query->num_rows()==1) [duplicate]致命错误:调用非对象代码点火器 $query->num_rows()==1) 上的成员函数 where() [重复]
【发布时间】:2012-10-02 13:42:22
【问题描述】:

可能重复:
CodeIgniter - Call to a member function select() on a non-object

我是 codeigniter 的新手,遇到了一些问题。

错误消息: 致命错误:调用 C:\xampp\htdocs\moi\CI\application\models\model_users 中非对象上的成员函数 where()。第12行的php

我的模特:

class Model_users extends CI_Model {

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

public function can_log_in() {


    $this->db->where('email', $this->input->post('email'));
    $this->db->where('pass', md5($this->input->post('password')));
    $query = $this->db->get('users');

    if ($query->num_rows()==1) {
        return TRUE;
    } else {
        return FALSE;
    }

我的控制器:

class Main extends CI_Controller {

public function index() {
    $this->login();
}

//Auslagern der Funktionen
public function login() {
    $this->load->view('login');
}

public function login_validation() {

    $this->load->library('form_validation');

    $this->form_validation->set_rules('email', 'email', 'required|valid_email|xss_clean|callback_username_check');
    $this->form_validation->set_rules('password', 'password', 'required|md5');

    if ($this->form_validation->run()) {
        redirect('main/members');
    } else {
        $this->load->view('login');
    }
}

public function username_check() {
    $this->load->library('form_validation');
    $this->load->model('model_users');
    if ($this->model_users->can_log_in()) {
        return TRUE;
    } else {
        $this->form_validation->set_message('username_check', 'incorect User or Passwort.');
        return FALSE;
    }
}

}

请帮忙

【问题讨论】:

  • 显然方法 where 被调用在不是对象的东西上。你能向用户展示用户超类吗?
  • 但在我的配置文件中定义
  • 我不知道代码点火器,但错误很明显。 $this->db 不是对象。如果您认为如果您从对象的超类请求 db 字段,那么您做错了。
  • 我该如何解决这个问题?
  • 尝试将username_check() 中的$this->load->model('model_users'); 行更改为$this->load->model('model_users', '', TRUE); 以自动连接到您的数据库

标签: php mysql database codeigniter


【解决方案1】:

见以下网址

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

试试看

class User_model extends CI_Model { 

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

     public function can_log_in() {


        $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 ($query->num_rows()==1) {
         return TRUE;
       } else {
         return FALSE;
      }


}

}

【讨论】:

  • $autoload['libraries'] = array('database'); -->application/config/autoload.php
  • 我已经更新了我的答案,请看一下。
  • 致命错误:在 C:\xampp\htdocs\moi\CI\application\models\model_users.php 第 7 行调用非对象上的成员函数 database()
  • 没有 // $this->load->database();我收到了这个致命错误:在第 13 行的 C:\xampp\htdocs\moi\CI\application\models\model_users.php 中的非对象上调用成员函数 select()
【解决方案2】:

$this->db 似乎没有定义。似乎您的模型中没有属性名称$db

您是否使用过:$this->load->database(); 来初始化您的数据库?

试试下面的代码:

class Model_users extends CI_Model {

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

信息
示例:http://maestric.com/doc/php/codeigniter_models
用户指南:http://ellislab.com/codeigniter/user_guide/database/examples.html

【讨论】:

  • 好的,我已经添加了 $this->load->database();在构造函数中,但现在是第 7 行的错误。
  • 你能更新你当前状态的文件吗(哪一行是第 7 行?)
  • 第 7 行正好是 $this->load->database();
  • <?php class Model_users extends CI_Model { function __construct(){ parent::__construct(); $this->load->database(); }
  • 你设置$autoload[‘libraries’] = array(‘database’);了吗?
【解决方案3】:

您的数据库是否处于自动加载状态?如果没有,您可能需要将此代码添加到构造函数中:

$this->load->database();

【讨论】:

  • 我收到了类似的错误消息:致命错误:调用 C:\xampp\htdocs\moi\CI\application\models\model_users.php 中非对象上的成员函数 database()第 7 行
  • 您不是偶然移动或重命名了 Codeigniter 系统文件夹吗?听起来确实没有一个 CI 核心加载正确。
【解决方案4】:

您遇到的问题与 Codeigniter 没有太大关系,也与数据库无关。

这首先是一个标准的 PHP 错误,有关一般信息,请参阅

在您的情况下 - 暂时忘记 Codeigniter - 这意味着 $this 机器人有任何 ->db->load 成员,失败的代码行:

$this->db->where('email', $this->input->post('email'));
$this->load->database();

很明显,这需要进一步调试。为什么没有加载这些库?为什么连数据库都加载不出来?

其实这需要进一步调试。在我看来,您在 cmets 中进一步询问是没有意义的,其他用户只能给出与您在问题中提供良好信息一样好的答案。但是,当然,提出问题也总是有限的。

也许首先发布您的模型类的完整代码。可能只是模型类本身已经搞砸了。新鲜的眼睛在这里可以更快地发现一些东西。

但这并不能保证,只是一种可能性。你也可以在其他地方打破它。这些很难达到,因此您最好在开发环境中使用像 Xdebug 这样的步进调试器。

【讨论】:

    猜你喜欢
    • 2013-01-30
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多