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

PDO a php – Volání členské funkce Prepare() na neobjektu

@papaja trefil hřebíček přesně na hlavičku. Vaše připojení PDO selhalo, takže nemáte objekt PDO, na kterém byste mohli spustit metodu přípravy.

Z hlavy, myslím, že vám chybí koncová uvozovka na řetězci $dsn. Pravděpodobně budete chtít přidat následující za $this->dbname a před středník:

. "'"

To je jednoduchý citát zabalený do dvojitých uvozovek. K vytvoření řetězce DSN používám následující syntaxi:

"mysql:host=$this->HOST;dbname=$this->DATABASE"

Každopádně si vytvořte testovací soubor, abyste přesně věděli, v čem je problém. Testovací soubor by měl vypadat takto:

class TestDatabase{

    private $host      = DB_HOST;
    private $user      = DB_USER;
    private $pass      = DB_PASS;
    private $dbname    = DB_NAME;
    private $dbh;


    public function __construct(){

        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;

        $options = array(
            PDO::ATTR_PERSISTENT    => true,
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
        );

        $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
    }
}

Všimněte si, že nespouštíme instanci objektu PDO v bloku try catch. Zatímco vy nikdy když to uděláte v produkci, bude to užitečné pro váš test, protože to vyvolá fatální výjimku obsahující všechny podrobnosti vašeho připojení.

Nyní vytvořte instanci testovací třídy a pokračujte v ladění chyb, které obdržíte. Opět budou podrobnější než předchozí chyba, protože se bude jednat o nezachycenou výjimku PDO.



  1. MYSQL – rozdělení dat do více řádků

  2. Jak vygenerovat diagram entit-relationship (ER) pomocí Oracle SQL Developer

  3. MySQL:Dotaz na seznam dostupných možností pro SET

  4. Jak odečíst rok od data v MariaDB