sql >> Databáze >  >> RDS >> Mysql

PDO Závažná chyba:Volání členské funkce Prepare() na jiném než objektu

Váš kód má několik problémů.

Dva byly vysvětleny v druhé odpovědi, díky čemuž bude váš kód fungovat (nakonec se to všechno pokazilo), ale stále je to špatný přístup, který se připojí k databázi tolikrát, kolik máte objektů .

Tímto způsobem změňte třídu DatabaseConnection

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

Tímto způsobem změňte konstruktor LoginRegister

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

A tímto způsobem vytvořte register.php

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

a poté v LoginRegister použijte $this->db místo $pdo celou cestu.

Hlavní myšlenkou udělat z připojení $db externí službu pro aplikační třídu. Jinak to bude stejné jako opovrhované globální, ale jen v jiné podobě.



  1. Zkontrolujte, zda existuje řada, Laravel

  2. Monitoring Galera Cluster pro MySQL nebo MariaDB – porozumění metrikám (aktualizováno)

  3. Načítání nejnovějšího záznamu na uživatele

  4. Je možné zhustit primární klíč/sériový klíč?