【问题标题】:Codeigniter Active Records Fatal ErrorCodeigniter 活动记录致命错误
【发布时间】:2012-03-06 04:45:12
【问题描述】:

新的堆栈溢出(和codeigniter!)我在我的第一个项目中遇到了这个问题,自然......我确信这是我的一个愚蠢的错误,但我一直在研究并尝试在过去的几个小时里弄明白了,我猫似乎弄明白了......

我已自动加载数据库库,但每次尝试使用模型中的方法时都会出现此错误:

“致命错误:在第 13 行的 application\models\user_model.php 中的非对象上调用成员函数 where()”

这是我的用户控制器方法,由我的登录表单视图中的表单操作调用:

function login() {
    $this->load->model('user_model'); 
    $query = $this->user_model->validate();  

    if ($query) 
    {
        $data = array(
                    'username'     => $this->input->post('username'),
                    'is_logged_in' => true
                 );

        $this->session->set_userdata($data);
        redirect('members');
    } 
    else
    {
        $this->load->view('user');
    }

} // end login function

这是我的模型:

<?php

class User_model extends CI_Model {

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

// -------------------------------------------------------------------------------

// validate(): query db for user/pass and return true or false
function validate() {
    $this->db->where('username', $this->input->post('username'));
    $this->db->where('password', sha1($this->input->post('password')));
    $query = $this->db->get('users');

    if ($query->num_rows() > 0) 
    {
        return true;
    }

} // end validate function

// -------------------------------------------------------------------------------

function check()
{
   $dbo = $this->load->database('default',TRUE);
   $query = $this->$dbo->get('users');
   echo $query->num_rows();
}

} // end user_model class

当我尝试调试问题时,我将 db 方法添加到控制器并且它们运行良好......在我的模型中使用它们时,无论出于何种原因,它们都不想工作并抛出我提到的致命错误。感谢你们可以为我提供的任何帮助。

提前致谢!

(使用 codeigniter 2.1)

编辑:

只是为了更清楚一点,当我将 validate 方法(从我的模型)添加到我的控制器时,我没有收到任何错误,并且一切正常......但是当将它留在模型中并调用它时从控制器我得到了致命错误

【问题讨论】:

  • 您确定已加载数据库库吗?要自动加载库,您需要编辑 application/config/autoload.php 并将需要自动加载的内容添加到相应的数组中。
  • Positive... 不知道是什么,但我做了一些搜索,发现其他人也有同样的问题。使用完全相同的代码和文件重新安装 CodeIgniter,问题消失了……奇怪……CodeIgniter 会话类也有问题,不得不切换它以使会话为我工作。不用说,拔了几天头发,我终于进步了:)

标签: php codeigniter activerecord


【解决方案1】:

你错过了 $query = 部分,应该是:

$query = $this->db->get('users'); if ($query->num_rows() > 0) { return true; }

编辑: 我想你还没有添加所有的父构造函数,试试:

class Users extends CI_Model { function __Users() { parent::__CI_Model(); $this->load->database(); }

【讨论】:

  • 抱歉,我在将代码添加到问题时忘记添加了。它在实际代码中,但我得到的错误是在第 13 行的 where() 方法上。
  • 将 check() 添加到 user_model 并从用户控制器调用它,收到此错误:致命错误:在 application\models\user_model 中的非对象上调用成员函数 database()。 php。正如我之前提到的,将 db 方法放入控制器时工作正常,但是当我尝试在我的方法中使用它们时,我不断收到这些致命错误......奇怪
【解决方案2】:

我认为你的模型中验证的函数应该是这样的

// validate(): query db for user/pass and return true or false

function validate($username,$password) {

    $this->db->where('username', $username);
    $this->db->where('password', sha1($password));
    $query = $this->db->get('users');

    if ($query->num_rows() > 0) 
    {
        return true;
    }

} // end validate function

在你的控制器中你可以这样称呼它

function login()
{

$query =$this->user_model->validate($this->input->post('username'),$this->input->post('password')); 

  // the rest
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2011-06-13
    • 2011-01-13
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多