2016-04-11 7 views
-2

ich eine Störung erhalte, solange er unterhalb Code ausgeführt irgendeine hier pls mir helfenPHP Fatal error: Call auf eine Elementfunktion bind_param() auf einem Nicht-Objekt in

public function storeUser($name, $email, $password, $phone,$stream) { 

    $response = array(); 

    $uuid = uniqid('', true); 
    $hash = $this->hashSSHA($password); 
    $encrypted_password = $hash["encrypted"]; // encrypted password 
    $salt = $hash["salt"]; // salt 

    if (!$this->isUserExisted($email)) { 

     $stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, phone,stream, salt, created_at) VALUES('$uuid','$name','$email',$'$encrypted_password','$phone','$stream','$salt',NOW())"); 
     $stmt->bind_param("isssisss", $uuid,$name,$email,$encrypted_password,$phone,$stream,$salt,NOW()); 

     $result = $stmt->execute(); 

     $stmt->close(); 

     if ($result) { 

      // User successfully inserted 
      $response["error"] = false; 
      $response["user"] = $this->getUserByEmailAndPassword($email); 
     }else { 

      $response["error"] = true; 
      $response["message"] = "Oops! An error occurred while registereing"; 
     } 


    } else { 

     $response["error"] = false; 
     $response["user"] = $this->getUserByEmailAndPassword($email); 
    } 

     return $response; 

} 

der Fehler

PHP Fatal error: Call to a member function bind_param() on a non-object in /var/www/html/android_login_api_test/include/DB_Functions.php on line 98

+0

Es bedeutet Ihre SQL-Abfrage fehlgeschlagen/ist ungültig. Versuchen Sie es mit PHPMyAdmin auszuführen, um zu sehen, was passiert ist. Außerdem sollten Ihre VALUES Fragezeichen sein, wenn Sie über bind_param Werte an diese Werte binden. – Homberto

+0

Ersetzen Sie den Variablennamen in der Abfrage zu '?' Und entfernen Sie 'NOW()' aus den Parametern in 'bind_param' –

+1

Ich nehme an, Sie haben nicht die Mühe, genau zu lesen und zu verstehen," wie "vorbereitete Anweisungen funktionieren http: // www .php.net/manual/de/mysqli.quickstart.prepared-statements.php –

Antwort

3

Sie die Vorbereitung einer Abfrage ohne Platzhalter, dh:

$stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, phone,stream, salt, created_at) VALUES('$uuid','$name','$email',$'$encrypted_password','$phone','$stream','$salt',NOW())"); 
$stmt->bind_param("isssisss", $uuid,$name,$email,$encrypted_password,$phone,$stream,$salt,NOW()); 

Es scheint, der Code, den Sie kopieren kleistert mir. Ersetzen Sie den Code oben:

$stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, phone,stream, salt, created_at) VALUES(?,?,?,?,?,?,?,NOW())"); 
$stmt->bind_param("isssiss", $uuid,$name,$email,$encrypted_password,$phone,$stream,$salt); 

Hinweis Ich ließ den letzten Parameter in der bind_param Funktion und die letzte ‚s‘ im ersten Argument der Funktion.

+0

vielen Dank es funktioniert für mich –

+0

@KunalAgrawal Wenn es Ihr Problem gelöst hat, in Betracht ziehen, die Antwort zu akzeptieren. Hier ist, wie http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work dann hier zurückkehren und das gleiche mit dem Häkchen/Häkchen, bis es grün wird. Dies informiert die Community, dass eine Lösung gefunden wurde. Ansonsten denken andere vielleicht, dass die Frage noch offen ist und möchten vielleicht (mehr) Antworten neben einigen schlechten/falschen Antworten posten. Das ist das "Richtige" ;-) –

-2

$stmt speichert Ergebnis von prepare Funktion. Scheint wie prepare gibt Objekt nicht zurück, aber Sie versuchen, auf $stmt als ein Objekt zuzugreifen.

Verwandte Themen