Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Schwerwiegender PDO-Fehler:Aufruf einer Mitgliedsfunktion "prepare()" für ein Nicht-Objekt

Es gibt mehrere Probleme mit Ihrem Code.

Zwei wurden in der anderen Antwort erklärt, wodurch Ihr Code funktioniert (schließlich war alles verdorben), aber es ist immer noch ein falscher Ansatz, der eine Verbindung zur Datenbank so oft herstellt, wie Sie Objekte haben .

Ändern Sie die DatabaseConnection-Klasse auf diese Weise

class DatabaseConnection{
    public $pdo;
    public function __construct(){
        $user = 'root';
        $pass = '';
        $dsn  = 'mysql:charset=utf8;dbname=test;host=localhost;charset=utf8';
        $opt  = array(
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        );
        $this->pdo = new PDO($dsn, 'root', '', $opt);
    }
}

Ändern Sie den LoginRegister-Konstruktor auf diese Weise

function __construct($db){
    $this->db= $db;
}

Und machen Sie register.php auf diese Weise

require_once "functions.php";
$db = new DatabaseConnection();
$user = new LoginRegister($db->pdo);

und dann in LoginRegister verwenden Sie $this->db statt $pdo den ganzen Weg.

Die Grundidee, die $db-Verbindung zu einem externen Dienst für die Anwendungsklasse zu machen. Sonst wird es wie global verachtet sein, nur eben in anderer Form.