Search code examples
phpbindparam

PHP Fatal error: Call to a member function bind_param() on a non-object in


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


Solution

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