我试图找出可能导致"在null"上调用成员函数prepare()的原因。在我的代码中,但我无法弄清楚它为什么会发生。这是我目前的代码:
Foo
获取$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;
的完整静态函数:
static::getDB()
答案 0 :(得分:1)
static::getDB()
我认为你不明白它是如何运作的。 static
来自班级中的used to resolve static calls 。你的主要代码似乎根本不属于一个类。所以你应该引用类名本身
Model::getDB()