in reply to Updating a database

You are attempting to sock an entire WHERE clause into a single placeholder. I think you want:

my $sth=$dbh->prepare("UPDATE Volunteer set Volunteer =?, WHERE $id");
Note double quotes, they allow $id to be interpolated.

What does 'TBD' indicate? Are your Volunteers unidentified until they attain max(Number)? I'm a little puzzled by what your code seems to try to do. I should think:

my $sth = $dbh->prepare("select Date from Volunteer where Volunteer=?" +); $sth->execute($user);
would be enough. I mistrust having the table and column have the same name.

After Compline,
Zaxo