in reply to DBI problem on fetchrow

A max(anything) will only return one value (unless combined with GROUP BY or the like).

So you can just

$sth_max_score->execute(); # no loop here: my @max_score = $sth_max_score->fetchrow_array(); # now $max_score[0] holds your desired value

There's a prettier solution:

$sth->execute(); $sth->bind_columns(\my $max); $sth->fetch; # $max holds the value here