Fatal error: Call to a member function prepare() on null, Connection is correct

Fatal error: Call to a member function prepare() on null, Connection is correct

所以我目前正在为某人做一个登录的东西,当我按下登录按钮时,它会弹出到我的屏幕上:

Fatal error: Call to a member function prepare() on null in /Applications/XAMPP/xamppfiles/htdocs/application/classes/users.php on line 37

这是那个文件的那个区域正在发生的事情:

public static function login() // 32
{ // 33
    $username = $_POST['username']; // 34
    $password = $_POST['password']; // 35
    $query = self::$connection->prepare('SELECT * FROM users WHERE username = :username'); // 36
    $query->execute(array(':username' => $username)); // 37

没什么奇怪的。 self::$connection 元素来自我的构造函数:

 public function __construct()
 {
     self::$connection = Core\Database::connect();
 }

是的,我确实做到了 Use DeGier\Core;

数据库文件非常基础:

public static function connect()
{
    try
    {
        self::$conn = new \PDO('mysql:hostname=localhost;charset=utf8;dbname=degieradmin;', 'root', ********);
        self::$conn->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
        self::$conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
    }
        catch (\PDOException $e)
    {
        throw new \PDOException('PDO error:' . $e->getMessage());
    }
    return self::$conn;
}

我做了所有基本的事情;

我找不到任何错误。

为什么这种东西平时能用,这次却不行?

您正在 class.

的构造函数中设置静态变量,即数据库连接

但是,构造函数仅在 class 的对象创建时才 运行。

所以你不应该在那里这样做,除非你绝对确定你做的第一件事就是创建你的对象的实例。

您应该在其他地方初始化您的数据库和/或检查您的登录方法是否已设置。