【问题标题】:Can't pass mysqli object to class in PHP无法将 mysqli 对象传递给 PHP 中的类
【发布时间】:2013-04-07 19:56:42
【问题描述】:

所以我正在 php 中处理一个简单的用户类,它有一个包含 mysqli 对象的类变量,但是我不断收到错误:

致命错误:在第 X 行 */classes/user.php 中的非对象上调用成员函数 real_escape_string()

我已经检查了所有内容,它应该可以工作,但它没有。不知何故。这是我的代码:

namespace bibliotheek;

class user
{
    private $mysql;

    private $logged_in = false;
    private $user_data = null;      //ARRAY: user_id, e-mail, password, bevoegdheid, naam, achternaam, adres, postcode, stad

    function __construct(\mysqli $mysql, $salt)
    {
        $this->mysql = $mysql;
    }

    public function login($email, $pass, $hash = false)
    {
        $email = $this->mysql->real_escape_string($email);
        if($hash == false)
            $pass  = sha1($this->salt.$pass);

        $query  = "SELECT *
                   FROM gebruikers
                   WHERE gebruikers.email = '$email' AND gebruikers.password = '$pass'";

        $result    = $this->mysql->query($query);
        $user_data = $result->fetch_assoc();

        if($user_data == null)
            return;

        $this->logged_in = true;
        $this->user_data = $user_data;
        $this->create_cookies($email, $pass);
    }
}

这就是将 mysqli 对象传递给类的方式:

$mysql  = new mysqli($cfg['mysql_server'], $cfg['username'], $cfg['password'], $cfg['database']);
$user   = new bibliotheek\user($mysql, $cfg['salt']);

mysql登录数据是正确的,我已经确定了。

我一定遗漏了一些非常明显的东西,但我就是看不到。任何帮助是极大的赞赏。谢谢!

【问题讨论】:

  • 当您在错误行之前插入var_dump($this->mysql); 时,是什么给出的?
  • object(mysqli)#1 (17) {...} 我省略了括号中的内容。
  • 如果下一行访问该对象,则错误消息不匹配,这意味着您正在查看错误的位置或时间错误的位置。您需要改进此问题的故障排除。

标签: php object mysqli


【解决方案1】:

应该是这样的

error_reporting(E_ALL);

$mysql  = new mysqli($cfg['mysql_server'], $cfg['username'], $cfg['password'], $cfg['database']);
if ( !$mysql )
{
    throw new Exception(mysqli_connect_error()));
}
$user = new bibliotheek\user($mysql, $cfg['salt']);

【讨论】:

    【解决方案2】:

    我真的很傻,我把我的代码贴在这里时压缩了一点,我省略了这部分:

        $this->mysql = $mysql;
        $this->mysql = $salt;
    

    现在杀了我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2020-05-09
      • 2011-09-04
      • 2015-11-16
      • 1970-01-01
      • 2015-06-19
      相关资源
      最近更新 更多