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;
}
我做了所有基本的事情;
- 我检查了MySQL是否开启,
- 我检查了数据库连接的详细信息是否正确,
- 我检查了那个特定的数据库是否存在。
- 我检查了文件是否可读。
我找不到任何错误。
为什么这种东西平时能用,这次却不行?
您正在 class.
的构造函数中设置静态变量,即数据库连接
但是,构造函数仅在 class 的对象创建时才 运行。
所以你不应该在那里这样做,除非你绝对确定你做的第一件事就是创建你的对象的实例。
您应该在其他地方初始化您的数据库和/或检查您的登录方法是否已设置。
所以我目前正在为某人做一个登录的东西,当我按下登录按钮时,它会弹出到我的屏幕上:
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;
}
我做了所有基本的事情;
- 我检查了MySQL是否开启,
- 我检查了数据库连接的详细信息是否正确,
- 我检查了那个特定的数据库是否存在。
- 我检查了文件是否可读。
我找不到任何错误。
为什么这种东西平时能用,这次却不行?
您正在 class.
的构造函数中设置静态变量,即数据库连接但是,构造函数仅在 class 的对象创建时才 运行。
所以你不应该在那里这样做,除非你绝对确定你做的第一件事就是创建你的对象的实例。
您应该在其他地方初始化您的数据库和/或检查您的登录方法是否已设置。