I don't think
$select->execute($gamename) returns the first (and in fact only) row. Instead, it returns a "success" value, which will always be true, BTW. You have to ask for the value of the first (and only) row.
You can do that, for example, using
$select->execute($gamename);
my($rows) = $select->fetchrow_array; # first row
$select->finish; # premature abort: no more rows
if($rows) { # found
$update->execute( $gamedesc, $gamecount, $gamename );
}
else {
$insert->execute( $gamename, $gamedesc, 0 );
}
The
finish tells DBI and the DB you no longer need this instance of the statement handle query. You normally have to call this after a
SELECT query where you don't try to deplete the statement handle, fetching rows, thus until it returns
undef.
BTW untested, I hope I got it right! :)