Mysql
 sql >> Database >  >> RDS >> Mysql

Errore irreversibile PDO:chiamata a una funzione membro prepare() su un non oggetto

Ci sono diversi problemi con il tuo codice.

Due sono state spiegate nell'altra risposta, il che farà funzionare il tuo codice (alla fine è stato tutto rovinato), ma è ancora un approccio sbagliato, che si collegherà al database tante volte quanti più oggetti hai .

Cambia la classe DatabaseConnection in questo modo

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

Cambia il costruttore LoginRegister in questo modo

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

E crea register.php in questo modo

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

e poi in LoginRegister usa $this->db invece di $pdo fino in fondo.

L'idea principale di rendere la connessione $db un servizio esterno per la classe dell'applicazione. Altrimenti sarà lo stesso disprezzato globale, ma solo in un'altra forma.