В настоящее время я делаю кому-то вход в систему, и когда я нажимаю кнопку входа, на моем экране появляется следующее:
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;
}
Я сделал все основные вещи;
Я не мог найти ничего плохого.
Так как же получается, что такие вещи обычно работают, но на этот раз это не так?
Вы устанавливаете свою статическую переменную, соединение с базой данных, в конструкторе вашего класса.
Однако конструктор запускается только тогда, когда создается объект этого класса.
Так что вам не следует делать это там, если вы не абсолютно уверены, что самое первое, что вы делаете, это создаете экземпляр вашего объекта.
Вы должны инициализировать свою базу данных где-то еще и / или проверить в своем методе входа, установлена ли она.
Других решений пока нет …