sql >> Database >  >> RDS >> Mysql

PDO Fatale fout:aanroep van een lidfunctie prepare() op een niet-object

Er zijn verschillende problemen met uw code.

Twee werden uitgelegd in het andere antwoord, waardoor je code werkt (uiteindelijk was het allemaal verwend), maar het is nog steeds een verkeerde benadering, die net zo vaak verbinding zal maken met de database als veel objecten die je hebt .

Wijzig de klasse DatabaseConnection op deze manier

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

Wijzig LoginRegister-constructor op deze manier

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

En maak register.php op deze manier

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

en gebruik dan in LoginRegister $this->db in plaats van $pdo helemaal.

Het belangrijkste idee om $db-verbinding een externe service voor de toepassingsklasse te maken. Anders zal het allemaal hetzelfde zijn als wereldwijd veracht, maar dan in een andere vorm.



  1. Hoe de databaseconfiguratieparameter te lezen met behulp van het eigenschappenbestand in de slaapstand

  2. Webinar:nieuwe functies in PostgreSQL 11 [vervolgen]

  3. Problemen bij het lezen/schrijven van UTF-8-gegevens in MySQL vanuit Java met JDBC-connector 5.1

  4. Waarom doet Postgres een sequentiële scan waarbij de index <1% van de gegevens zou opleveren?