The ? for the id field is for the auto_increment. Is that not how you specify the value for a auto_increment field?
For an auto_increment, or serial, field, you don't have to do anything at all. Just do the following:
my $sth_m = $dbh_m->prepare(<<SQL) or die $dbh_m->errstr;
INSERT INTO memo
(date, user, ref, creator, status, memo_text) values
(?, ?, ?, ?, ?, ?)
SQL
$sth_m->execute("$year-$mon-$mday",
$INPUT{user}, INPUT{ref}, $INPUT{username},
'notread', $memo_final) or die $sth_m->errstr;
That is, don't do anything about specifying or filling in the id field. The database will fill it in for you.