Something else is probably wrong, this code seems "runable" to me. Check what is $cat before running the query. You should also consider using placeholders:
my $sql = 'UPDATE category SET name=? AND view_cats_prod=? AND descrip
+tion=? WHERE id=?'
my $y;
if (param('page') eq "yes") {
$y = 'yes';
} else {
$y = 'no';
}
$dbh->do($sql, undef, $cat, $y, $des, $id) ||
die $dbh->errstr;
Tiago
Update: Without more information all I can do is toss wild guesses. Did you commit if you need to? Is the field of the right type for the value you are inserting?