Проблема с глобальной переменной $db

Всем привет , решил я сделать создание аккаунт через классы (через её функции) , тут я столкнулся с такой проблемой что моя $db находит мой класс , проблема была в видимости $db , сделал я её глобальной и тут вылезла такая ошибка :

Parse error: syntax error, unexpected '=', expecting ';' or ',' in C:\MAMP\htdocs\exmp1\function.php on line 6

Сама база данных

 try {
  global $db = new PDO("mysql:host=localhost;dbname=firstdatabase", 'root', 'root');
}
catch(PDOException $e) {
    echo $e->getMessage();
}

Сам класс с функцией создания аккаунта

class User {

  public static function AddUser($login, $password) {
    $sql = "INSERT INTO users (login, password) VALUES (:login, :password)";
    $statment = $db->prepare($sql);

    $statment->bindParam(":login", $login);
    $statment->bindParam(":password", $password);
    $statment->execute();
  }
}

Как решить данную проблему ? Заранее спасибо всем кто ответил )


Ответы (1 шт):

Автор решения: Ипатьев

Есть такой старый анекдот.

Вот тебе тоже надо определиться - или "через классы", или "с глобальной переменной".

Судя по всему, что такое классы ты не понимаешь от слова "совсем". Но если прямо очень хочется, чтобы всё было как у взрослых, то про глобальные переменные надо вообще навсегда забыть. А $db надо передавать в конструктор и присваивать свойству класса:

<?php
class User {

    private $db;

    /* Get database access */
    public function __construct(\PDO $pdo) {
        $this->db = $pdo;
    }

    public function AddUser($login, $password) {
        $sql = "INSERT INTO users (login, password) VALUES (:login, :password)";
        $statment = $this->db->prepare($sql);
        $statment->bindParam(":login", $login);
        $statment->bindParam(":password", $password);
        $statment->execute();
    }
}

И соответственно, в коде

$user = new User($db);
$user->AddUser($login, $password);

В общем все как написано в этом ответе

Если же это все пока для тебя слишком сложно, то не надо мучать классы - пиши функциями и инклюдами.

Да, и код соединения тоже неправильный. Соединяться надо так как написано здесь

→ Ссылка