Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro fatal do PDO:Chamada para uma função de membro prepare() em um não-objeto


Existem vários problemas com seu código.

Dois foram explicados na outra resposta, o que fará seu código funcionar (eventualmente tudo foi estragado), mas ainda é uma abordagem errada, que se conectará ao banco de dados tantas vezes quantos objetos você tiver .

Altere a classe DatabaseConnection desta maneira
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);
    }
}

Altere o construtor LoginRegister dessa maneira
function __construct($db){
    $this->db= $db;
}

E faça register.php desta forma
require_once "functions.php";
$db = new DatabaseConnection();
$user = new LoginRegister($db->pdo);

e então em LoginRegister use $this->db em vez de $pdo todo o caminho.

A ideia principal é tornar a conexão $db um serviço externo para a classe do aplicativo. Caso contrário, será tudo igual ao desprezado global, mas apenas de outra forma.