and it doesn't cause a warning then $total_hours can be excluded from suspect list. $total_minutes gets its value from $row which seems to be undefined. Are you sure that your query is correct and returns correct number of rows?
Probably fetchrow doesn't return what you expect it to return. Often to help myself debugging simular problems I use Data::Dumper to check if variables really have data I expect them to have. Try to add after line with fetchrow