PHP - 访问对象属性$ id时出错

问题描述 投票:1回答:1

我正在关注如何使用数据库连接创建注册表的教程,但由于某种原因,代码对我不起作用。我不知道我做错了什么,所以也许有人可以为我指出。

这是User.php文件中的代码:

<?php
class User {
    private $_db,
            $_data,
            $_sessionName;

    public function __construct($user = null) {
        $this->_db = DB::getInstance();

        $this->_sessionName = Config::get('session/session_name');
    }

    public function create($fields = array()) {
        if(!$this->_db->insert('users', $fields)) {
            throw new Exception('There was a problem creating an account.');
        }
    }

    public function find($user = null) {
        if($user) {
            $field = (is_numeric($user)) ? 'id' : 'username';
            $data = $this->_db->get('users', array($field, '=', $user));

            if($data->count()) {
                $this->_data = $data->first();
                return true;
            }
        }
        return false;
    }

    public function login($username = null, $password = null) {
        $user = $this->find($username);

        if($user) {
            if($this->data()->password === Hash::make($password, $this->data()->salt)) {
                Session::put($this->_sessionName, $this->data()->id);
                return true;
            }
        }
        return false;
    }

    private function data() {
        return $this->_data;
    }
}
?>

得到此错误:

注意:未定义的属性:第37行的/opt/lampp/htdocs/rd-website/classes/User.php中的stdClass :: $ id

第37行是:Session::put($this->_sessionName, $this->data()->id);

有帮助吗?

php
1个回答
0
投票

问题是我在数据库的users表中有一个名为“ID”的列,而在User.php文件中,它被写为“id”。

因为如果你在Windows上运行不会出现问题或者给出任何错误,Mysql会不区分大小写,但是对于某些Unix系统而言它是区分大小写的,我运行Kali-Linux以便返回错误。

我刚刚在数据库中将“ID”列更改为“id”,因为这是最简单的事情,现在代码完美无缺。

如果您正在寻找永久解决方案,那么您将不得不更改“my.cnf”文件,

在LAMPP / XAMPP ......下:

/opt/lamp P/etc/没有.采暖费

独立的mysql服务器:

/etc/MySQL/没有.采暖费

使用此行(lower_case_table_names = 1)您可以更改为= 0,1或2,但这取决于您的系统和您的需求。

之后,您需要重新启动该服务。

© www.soinside.com 2019 - 2024. All rights reserved.