The Royals avoided a three-game sweep and moved within 1 1/2 games of the AL Central-leading Tigers. Kansas City began the day with a half-game edge over Seattle for the second wild-card spot.
Porcello (15-12) is 0-4 in his past five starts. He yielded four runs on nine hits and two walks in 3 1-3 innings.
Guthrie (12-11) pitched out of a bases loaded jam in the second and was pulled after 81 pitches and 5 1-3 innings, yielding one earned run.
Davis struck out two, bringing his strikeout total to 103, tying a Royals' record for a reliever. Holland threw a perfect ninth to log his 43rd save in 45 chances, and his first since Sept. 3.
Alex Gordon snapped an 0-for-14 slump with a RBI double in the seventh to pad the Royals' lead.
Ian Kinsler homered, his 16th, to lead off the third for the Tigers.
J.D. Martinez scored in the fourth on an error by Moustakas at third base. Moustakas has committed six errors in the past 12 games.