私のコードで "nullへのメンバ関数の呼び出し"を引き起こしている原因を突き止めようとしています私はなぜそれが起こっているのか理解できません。ここに私の現在のコードは次のとおりです。"nullでのメンバ関数の呼び出し"エラーが発生しましたが、データはまだデータベースに追加されました
$password_hash = password_hash($this->password, PASSWORD_DEFAULT);
$sql = 'INSERT INTO users (name, email, password_hash)
VALUES (:name, :email, :password_hash)';
$db = static::getDB();
$stmt = $db->prepare($sql); //This is the line specified in the error
$stmt->bindValue(':name', $this->name, PDO::PARAM_STR);
$stmt->bindValue(':email', $this->email, PDO::PARAM_STR);
$stmt->bindValue(':password_hash', $password_hash, PDO::PARAM_STR);
$stmt->execute();
$db
を取得するためのコードはここにある:このコードの値はその中のすべての権利のデータと設定ファイルからある
$dsn = 'mysql:host='.Config::DB_HOST.';dbname='.Config::DB_NAME.';charset=utf8';
$db = new PDO($dsn, Config::DB_USER, Config::DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db;
。最も混乱しているのは、フォームエントリが送信されたときにこのエラーが発生するということです。フォームエントリのデータはデータベースで終わるので、接続とデータは正しいとわかりますが、このエラーはポップアップし続け、コードが成功画面に戻るのを防ぎます。
アップデート:私はあなたがそれがどのように動作するかを理解するとは思わない
abstract class Model
{
protected static function getDB()
{
static $db = null;
if ($db === null) {
$dsn = 'mysql:host=' . Config::DB_HOST . ';dbname=' . Config::DB_NAME . ';charset=utf8';
$db = new PDO($dsn, Config::DB_USER, Config::DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return $db;
}
}
$ db変数が初期化されているかどうかチェックしましたか? –
具体的にはチェックしていませんが、データベースにフォームデータを追加することができます。 –
'$ db = static :: getDB();これは間違っています。コールのコンテキストを確認できますか? – bassxzero