Bonderman (9-4) struggled to the win for the Tigers, who own baseball's best record at 60-29.
"I knew that if I kept it close ... I knew the team wasn't going to go away and would fight," Bonderman said.
Bonderman allowed four runs and seven hits in 5 2/3 innings, walking a season-high five and striking out eight.
"I wasn't able to get in a good rhythm tonight," Bonderman said. "I got into and out of rhythm."
Jason Grilli replaced Bonderman with two on and two outs in the sixth and retired Graffanino on a grounder.
"Lost in the ballgame was Grilli coming in to get a big out," Detroit manager Jim Leyland said. "That might've been the biggest out of the game."
Fernando Rodney worked around two hits in the seventh, Joel Zumaya pitched a scoreless eighth and Todd Jones finished for his 24th save in 27 opportunities.
"Mistakes," Royals manager Buddy Bell said. "And then once you get in their bullpen, it's pretty tough."
Kansas City starter Brandon Duckworth (1-2) allowed six runs -- three earned -- and six hits in 4 2/3 innings, walking two and striking out three.
"I felt good, especially in the fifth inning," Duckworth said. "I just got behind in some counts and put myself behind the eight-ball and had to make better pitches. They were swinging the bat and they do what they do."
Duckworth didn't allow a hit until the fourth inning, when Curtis Granderson led off with a single. He was erased when Placido Polanco grounded into a double play, but Rodriguez then homered into the left-field stands, his eighth of the season, to make it 4-1.
Things fell apart for Duckworth in the fifth when Detroit scored five runs to drive him from the mound.
With one out, singles by Marcus Thames, Craig Monroe and Chris Shelton loaded the bases. Brandon Inge then singled to cut the lead to 4-2 and Granderson's groundout plated another run.
Polanco then hit a grounder to third, which Teahen bobbled and then threw wildly to first base, allowing two runs to score and giving the Tigers a 5-4 lead.
"We should have been out of the inning," Teahen said.
Duckworth then walked Rodriguez and was removed in favor of Todd Wellemeyer, who allowed an RBI single to Magglio Ordonez, the first batter he faced.
Kansas City took a 1-0 lead in the first on Graffanino's one-out home run. The Royals made it 2-0 in the second when John Buck's single with one out through a drawn-in infield scored Teahen, who had led off with a triple.
Teahen gave Kansas City a 4-0 lead in the fourth with a two-run homer. His eighth of the season followed Emil Brown's one-out double.
|Jeremy Bonderman picks up his ninth win despite yielding four runs on seven hits in 5 2/3 innings. (AP)|
|Players of the Game|
|Kansas City Royals|
|Joey Gathright, CF||4||0||0||0||1||2||3||.208|
|Tony Graffanino, 2B||4||1||1||1||1||0||3||.271|
|David DeJesus, LF||5||0||0||0||0||3||1||.302|
|Reggie Sanders, DH||5||0||1||0||0||2||1||.249|
|Matt Stairs, 1B||4||0||2||0||1||1||0||.272|
|Emil Brown, RF||4||1||2||0||0||0||4||.280|
|Mark Teahen, 3B||4||2||2||2||0||0||2||.265|
|Angel Berroa, SS||4||0||1||0||0||2||1||.245|
|John Buck, C||2||0||1||1||2||0||1||.244|
|2B - Emil Brown (21, Bonderman)|
|3B - Mark Teahen (5, Bonderman)|
|HR - Tony Graffanino (5, Bonderman), Mark Teahen (8, Bonderman)|
|RBI - Tony Graffanino (31), Mark Teahen 2 (31), John Buck (31)|
|Team LOB - 10|
|DP - Teahen-Graffanino-Stairs|
|E - Mark Teahen 2 (10, Misplayed grounder and wild throw)|
|Kansas City Royals|
|Brandon Duckworth (L,1-2)||4.2||6||6||3||2||3||1||5.40|
|Pitches-Strikes - Brandon Duckworth 103-59, Todd Wellemeyer 41-29, Joel Peralta 24-16|
|Ground Balls-Fly Balls - Brandon Duckworth 5-5, Todd Wellemeyer 3-4|
|Batters Faced - Brandon Duckworth 21, Todd Wellemeyer 9, Joel Peralta 5|
|Curtis Granderson, CF||3||0||1||1||0||1||0||.278|
|Placido Polanco, 2B||4||1||0||0||0||0||2||.282|
|Ivan Rodriguez, C||3||1||1||1||1||0||1||.308|
|Magglio Ordonez, RF||4||0||1||1||0||1||0||.311|
|Carlos Guillen, SS||3||0||1||0||1||0||2||.298|
|Marcus Thames, LF||3||1||1||0||0||0||1||.298|
|Alexis Gomez, LF||1||0||1||0||0||0||0||.286|
|Craig Monroe, DH||4||1||1||0||0||2||3||.245|
|Chris Shelton, 1B||4||1||1||0||0||1||2||.282|
|Brandon Inge, 3B||2||1||1||1||1||1||0||.223|
|HR - Ivan Rodriguez (8, Duckworth)|
|SH - Curtis Granderson (4)|
|RBI - Curtis Granderson (44), Ivan Rodriguez (40), Magglio Ordonez (63), Brandon Inge (48)|
|2-OUT RBI - Ivan Rodriguez (18), Magglio Ordonez (25)|
|PK - Carlos Guillen (2, Duckworth)|
|Team LOB - 5|
|DP - Polanco-Shelton-Guillen|
|Jeremy Bonderman (W,9-4)||5.2||7||4||4||5||8||2||3.59|
|Jason Grilli (H,6)||0.1||0||0||0||0||0||0||3.72|
|Fernando Rodney (H,11)||1||2||0||0||0||0||0||3.64|
|Joel Zumaya (H,21)||1||1||0||0||0||1||0||2.03|
|Todd Jones (S,24)||1||0||0||0||0||1||0||5.66|
|Pitches-Strikes - Jeremy Bonderman 108-69, Jason Grilli 4-2, Fernando Rodney 15-10, Joel Zumaya 12-7, Todd Jones 15-9|
|Ground Balls-Fly Balls - Jeremy Bonderman 5-3, Jason Grilli 1-0, Fernando Rodney 2-1, Todd Jones 1-1|
|Batters Faced - Jeremy Bonderman 28, Jason Grilli 1, Fernando Rodney 5, Joel Zumaya 4, Todd Jones 3|
|Attendance - 31967|
|Game Time - 3:08|
|Temperature - 78|
|Umpires - Home - Tim Welke, First Base - Gary Cederstrom, Second Base - Kerwin Danley, Third Base - Chad Fairchild|