KANSAS CITY, Mo. -- Mark Mulder beats Kansas City even on his bad nights.
The St. Louis left-hander walked a season-high five Friday and twice allowed the Royals to load the bases with none out. But thanks to John Mabry's grand slam and RBI double, the Cardinals defeated their cross-state rivals 7-6, pushing Mulder's career record against Kansas City to 9-1.
"I've pitched pretty well here at this park and even in Oakland against this team," said Mulder, who won his sixth decision in a row. "Sometimes you get comfortable in a stadium and you feel good out there, like today. We scored runs early and that makes it easier, too."
Mabry and Albert Pujols each had three hits and scored two runs for the defending NL champions, who have won 12 of their last 13 interleague games and beaten the Royals six times in a row.
Mabry hit a changeup from Zack Greinke (0-5) in the first inning for the first grand slam of his 10-year career. With one stroke of the bat, he equaled the number of runs the Royals provided for the hard-luck Greinke in all eight of his previous starts.
"I thought it was a bad pitch when I threw it," Greinke said. "It took me too long to figure out their approach. They had a good approach and by the time I figured it out, it was 5-0 already."
Playing four positions in his last seven starts, Mabry has 11 RBI.
"He's always ready, never makes an excuse," St. Louis manager Tony La Russa said. "And he'll give you everything he's got. Whatever that is, you've got it. He has been so clutch."
Mabry's RBI double in the third put St. Louis on top 5-0, and he added a single in the seventh.
"Tony's great at getting guys rest and he's also great at getting bench players at-bats, which makes you feel like you're part of the team," Mabry said. "Your confidence stays high and your sense of self worth towards the team stays high."
Mulder (6-1) gave up four runs and seven hits in 5 2/3 innings to earn his 16th interleague win.
Jason Isringhausen got three outs for his 10th save in 10 chances. After a leadoff single by Tony Graffanino in the ninth, Mike Sweeney grounded into a double play and Emil Brown struck out to end it.
The Royals scored two in the eighth on shortstop David Eckstein's throwing error with two outs to make it 7-6. Al Reyes then came in and hit David DeJesus with a pitch before retiring Angel Berroa on a popup.
After Mabry's RBI double in the third, Mulder allowed a leadoff double to John Buck in the bottom half and then gave up a walk and a single.
Sweeney then hit a three-run double, stretching his hitting streak to 14 games.
In the fifth, Sweeney's second double and two walks loaded the bases with none out.
Graffanino failed to score from third when Mulder's pitch got away from catcher Yadier Molina -- Graffanino apparently didn't see where the ball was. One run scored on Eli Marrero's double-play grounder, but Matt Diaz grounded out to end the inning.
"They made some good pitches when they had to. But I'm pleased with the way we played," said Bob Schaefer, who is 4-5 as Royals interim manager. "We were in position to win. Zack didn't cave in after that first inning and he got out of some jams."
Greinke, despite an ERA of 3.09 coming in, has not won in 13 starts, including nine this season. The Royals had given him just a half-run of support per game. He was charged with six runs and nine hits in five innings.
Eckstein singled and Larry Walker doubled to start the game for the Cardinals. With one out, Jim Edmonds walked and Mabry drove Greinke's next pitch 381 feet over the fence in right field.
Edmonds had an RBI double in the fifth, and Molina drove in a run with a single off Andrew Sisco in the eighth.