@papaja ramte sømmet lige på hovedet. Din PDO-forbindelse mislykkedes, så du har ikke et PDO-objekt at køre forberedelsesmetoden på.
Fra toppen af mit hoved tror jeg, at du mangler slutcitatet på $dsn-strengen. Du vil sandsynligvis tilføje følgende efter $this->dbname og før semikolon:
. "'"
Det er et enkelt citat pakket ind i dobbelte anførselstegn. Jeg bruger følgende syntaks til at oprette DSN-strengen:
"mysql:host=$this->HOST;dbname=$this->DATABASE"
Uanset hvad, opret en testfil, så du ved præcis, hvad problemet er. Testfilen skulle se sådan ud:
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);
}
}
Bemærk, at vi ikke kører instansieringen af PDO-objektet i en try catch-blok. Mens du ville aldrig nogensinde gør det i produktionen, vil det være nyttigt til din test, fordi det vil give en fatal undtagelse, der indeholder alle detaljerne om din forbindelse.
Instantiér nu testklassen, og fortsæt med at fejlfinde de fejl, du modtager. Igen vil de være mere detaljerede end den tidligere fejl, fordi det vil være en ufanget BOB-undtagelse.