sql >> Databasteknik >  >> RDS >> Mysql

PDO Fatalt fel:Anrop till en medlemsfunktion prepare() på ett icke-objekt

Det finns flera problem med din kod.

Två förklarades i det andra svaret, vilket kommer att få din kod att fungera (till slut blev allt bortskämt), men det är fortfarande fel tillvägagångssätt, vilket kommer att ansluta till databasen så många gånger så många objekt du har .

Ändra DatabaseConnection-klassen på detta sätt

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

Ändra LoginRegister-konstruktorn på detta sätt

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

Och gör register.php på det här sättet

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

och använd sedan $this->db i LoginRegister istället för $pdo hela vägen.

Huvudidén att göra $db-anslutning till en extern tjänst för applikationsklassen. Annars blir det samma sak som föraktad global, men bara i en annan form.



  1. MySQL/PHP-fel:[2002] Endast en användning av varje socketadress (protokoll/nätverksadress/port) är normalt tillåten

  2. Hur väljer man rader med kolumnvärde som null?

  3. Förstå 'datetimeoffset' lagringsstorlek i SQL Server

  4. MySQL Row Format:Skillnad mellan fast och dynamisk?