I notice that the error statement is in the *execute*, not in the *prepare* even though you check both places. My guess is that the problem may have to do with your placeholder value - what's in $grace? Does the statement work correctly without a placeholder?
update Just noticed that you include a semicolon at the end of the SQL statement, generally that's not correct for DBI statements.