@papaja удари нокътя точно в главата. Вашата PDO връзка се провали, така че нямате PDO обект, върху който да стартирате метода за подготовка.
На върха на главата ми, мисля, че пропускате крайния цитат на низа $dsn. Вероятно искате да добавите следното след $this->dbname и преди точка и запетая:
. "'"
Това е единична кавичка, опакована в двойни кавички. Използвам следния синтаксис, за да създам DSN низа:
"mysql:host=$this->HOST;dbname=$this->DATABASE"
Както и да е, създайте тестов файл, за да знаете точно какъв е проблемът. Тестовият файл трябва да изглежда така:
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);
}
}
Обърнете внимание, че не изпълняваме инстанцирането на PDO обекта в рамките на блок try catch. Докато виеникога не бихте направете това в производството, ще бъде полезно за вашия тест, защото ще предизвика фатално изключение, съдържащо всички подробности за вашата връзка.
Сега инстанцирайте тестовия клас и продължете с отстраняване на грешките, които получавате. Отново те ще бъдат по-подробни от предишната грешка, защото ще бъде неуловено PDO изключение.