Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur fatale PDO :appel à une fonction membre prepare() sur un non-objet

Il y a plusieurs problèmes avec votre code.

Deux ont été expliqués dans l'autre réponse, ce qui fera fonctionner votre code (tout a finalement été gâché), mais c'est toujours une mauvaise approche, qui se connectera à la base de données autant de fois que vous avez d'objets .

Modifiez la classe DatabaseConnection de cette façon

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);
    }
}

Modifiez le constructeur de LoginRegister de cette façon

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

Et créez ainsi register.php

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

puis dans LoginRegister, utilisez $this->db au lieu de $pdo tout le chemin.

L'idée principale de faire de la connexion $db un service externe pour la classe d'application. Sinon, ce sera tout de même méprisé global, mais juste sous une autre forme.