【问题标题】:PHP - Error when accessing object property $idPHP - 访问对象属性 $id 时出错
【发布时间】:2018-09-19 08:54:34
【问题描述】:

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

这是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;
    }
}
?>

恢复这个错误:

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

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

有什么帮助吗?

【问题讨论】:

  • 显示方法data()。它返回一个不包含$id 的(标准类)对象。但你要求它。
  • 并看到Hash::make 我不太确定您是否应该遵循本教程。可能已经过时了。这些天我们在这种情况下使用 password_verify()。
  • 是不是因为公共函数中的 ('id') find($user = null) { if($user) { $field = (is_numeric($user)) ? 'id' : '用户名'; $data = $this->_db->get('users', array($field, '=', $user)); if($data->count()) { $this->_data = $data->first();返回真; } } 返回错误;
  • 是的,教程已经过时了,但在某种程度上我喜欢这个家伙解释他在做什么的方式,我对此很陌生,但不得不在某个时候开始。我在使用 salt 函数时遇到了一些问题,因为如今 PHP 7.2.2 的工作方式有所不同。

标签: php


【解决方案1】:

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

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

我刚刚将数据库中的“ID”列更改为“id”,因为这是这次最容易做的事情,现在代码可以完美运行。

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

在 LAMPP/XAMPP 下...:

/opt/lampp/etc/my.cnf

独立的mysql服务器:

/etc/mysql/my.cnf

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

之后你需要重新启动服务。

【讨论】:

    猜你喜欢
    • 2018-07-18
    • 2011-03-09
    • 1970-01-01
    • 2023-03-23
    • 2017-11-27
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多