@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.