2017-03-23 1 views
-2

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; 
    } 
} 
+0

Haben Sie überprüft, ob die Variable $ db initialisiert ist? –

+0

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. –

+0

'$ db = static :: getDB();' das sieht falsch aus. Können wir den Kontext des Anrufs sehen? – bassxzero

Antwort

1
static::getDB() 

Ich glaube nicht, dass Sie verstehen, wie das funktioniert. static ist used to resolve static callsinnerhalb einer Klasse. Ihr Hauptcode scheint nicht in einer Klasse zu sein. Also sollten Sie den Klassennamen selbst referenzieren

Model::getDB() 
+1

Wenn 'static :: getDB()' außerhalb einer Member-Methode aufgerufen wurde, hätte dies zu einem anderen Fehler geführt. Ich dachte dasselbe, aber probier es einfach aus. Dies bedeutet, dass er diese Zeile 'static :: getDB()' innerhalb einer Klasse ausführen muss. – bassxzero

+0

@bassxzero Wenn ja, dann nicht genug Code haben wir die Frage zu beantworten – Machavity

+0

@Machavity Sie könnten OP irgend Dokumentation über 'abstrakt classes' auch – RiggsFolly

Verwandte Themen