Ich versuche, herauszufinden, was könnte das in meinem Code „Call auf eine Elementfunktion vorbereiten() auf null“ verursachen , aber ich kann nicht herausfinden, warum es passiert. Hier ist mein aktueller Code ist:Empfangen von „Call auf eine Elementfunktion vorbereiten() auf null“ Fehler, aber die Daten noch hinzugefügt Datenbank
$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();
Der Code die $db
zu bekommen, ist hier:
$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;
Die Werte in diesem Code sind aus einer Konfigurationsdatei mit den richtigen Daten enthalten. Was mich am meisten verwirrt ist, dass dieser Fehler beim Einreichen eines Formulareintrags auftritt. Die Daten aus dem Formulareintrag landen in der Datenbank, daher weiß ich, dass die Verbindung und die Daten korrekt sind. Dieser Fehler wird jedoch immer wieder angezeigt. Dadurch wird verhindert, dass mein Code zu einem Erfolgsbildschirm zurückkehrt.
Update:
Hier ist die vollständige statische Funktion für static::getDB()
:
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;
}
}
Haben Sie überprüft, ob die Variable $ db initialisiert ist? –
Ich habe nicht speziell dafür überprüft, aber ich bin in der Lage, Formulardaten zu meiner Datenbank hinzuzufügen, also nehme ich an, dass es ist. –
'$ db = static :: getDB();' das sieht falsch aus. Können wir den Kontext des Anrufs sehen? – bassxzero