@papajaは頭に釘を打ちました。 PDO接続に失敗したため、prepareメソッドを実行するための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);
}
}
trycatchブロック内でPDOオブジェクトのインスタンス化を実行していないことに注意してください。 決して 本番環境でこれを行うと、接続のすべての詳細を含む致命的な例外がスローされるため、テストに役立ちます。
次に、テストクラスをインスタンス化し、受け取ったエラーをデバッグして続行します。繰り返しになりますが、キャッチされないPDO例外になるため、前のエラーよりも詳細になります。