sql >> Base de Datos >  >> RDS >> Mysql

Error fatal de PDO:llamada a una función miembro prepare () en un no objeto

Hay varios problemas con su código.

Se explicaron dos en la otra respuesta, lo que hará que tu código funcione (finalmente, todo se arruinó), pero sigue siendo un enfoque incorrecto, que se conectará a la base de datos tantas veces como objetos tenga .

Cambie la clase de DatabaseConnection de esta manera

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

Cambie el constructor LoginRegister de esta manera

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

Y haz register.php de esta manera

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

y luego en LoginRegister use $this->db en lugar de $pdo todo el camino.

La idea principal es hacer que la conexión $db sea un servicio externo para la clase de aplicación. De lo contrario, será lo mismo que despreciado global, pero solo en otra forma.