-2

I am getting a error while running below code any one here pls help me out

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

the error is

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

3
  • It means your SQL query failed / is invalid. Try running it through PHPMyAdmin to see what happened. Also, your VALUES should be question marks if those are what you are binding values to through bind_param. Commented Apr 11, 2016 at 18:38
  • Replace the variable name in the query to ? and remove NOW() from the parameters in bind_param Commented Apr 11, 2016 at 18:38
  • 1
    I take it you didn't bother reading and understanding exactly "how" prepared statements work php.net/manual/en/mysqli.quickstart.prepared-statements.php Commented Apr 11, 2016 at 18:40

2 Answers 2

3

You're preparing a query without placeholders, i.e.:

$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()); 

It seems to me you copy-pasted the code. Replace the code above with:

$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); 

Note I dropped the last parameter in the bind_param function, and the last 's' in the first argument of said function.

Sign up to request clarification or add additional context in comments.

Comments

-2

$stmt stores result of prepare function. Seems like prepare doesn't return object, but you trying to access $stmt as an object.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.