why does my $stmt -> execute return as false? [closed]

// Check input errors before inserting in database
if(empty($username_err) && empty($password_err) && empty($firstname_err) && empty($lastname_err) && empty($email_err)){
    
    // Prepare an insert statement
 //   $sql = "INSERT INTO users (firstname, lastname, username, email, password) VALUES (?, ?, ?, ?, ?)";
     
   // if($stmt = $mysqli->prepare($sql))
    if($stmt = $mysqli->prepare("INSERT INTO users (firstname, lastname, username, email, password) VALUES (?, ?, ?, ?, ?)")){
        // Bind variables to the prepared statement as parameters
        $stmt->bind_param("sssss", $param_firstname, $param_lastname, $param_username, $param_email, $param_password);
        
        // Set parameters
        $param_firstname = $firstname;
        $param_lastname = $lastname;
        $param_username = $username;
        $param_email = $email;
        $param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
        
        // Attempt to execute the prepared statement
        if($stmt->execute()){
            // Redirect to login page
            header("location: login.php");
        } else{
            echo "Oops! Something went wrong. Please try again later.";
        }

        // Close statement
        $stmt->close();
    }
}

I wanted to put the input data into my database but its not working I’m not sure why. Please help me.