Carlos Ruiz had four hits and one of two bases-loaded walks in the eighth for NL East-leading Phillies, who have won Roy Halladay's last seven starts but put it together too late for the right-hander to become the majors' first 10-game winner. Two days earlier, Cole Hamels missed his bid for No. 10 in a 2-0 loss at Seattle.
Halladay allowed a run and four hits in six innings, matching his season low in his first official appearance in St. Louis but on the mound where he started for the American League in the 2009 All-Star game. He has worked six or more innings in 62 consecutive road starts, the majors' best such streak since Walter Johnson put up 82 in a row from 1911-15.
Daniel Descalso had two of St. Louis' five hits in the Cardinals' first game since Albert Pujols was diagnosed with a broken left wrist. St. Louis has dropped eight of 10 and fell a half-game behind the Brewers for the NL Central lead.
The Phillies are among four teams with a winning record on the road, going 18-16, and busted out of a three-game stretch in which they'd totaled seven runs.
Halladay struck out five to take the major league lead at 119. He failed to reach 100 pitches for the first time in 16 starts this year when he was lifted ahead of pinch-hitter Ross Gload's RBI single against Kyle McClellan that tied it at 1 in the seventh.
Trever Miller (0-1) retired one of the three batters he faced to start the eighth, and it got much worse from there for the Cardinals.
Jason Motte hit his only two batters, forcing in the tying run when he plunked Placido Polanco on a full count. Pinch-hitter Ben Francisco put Philadelphia in front with a single off Brian Tallet and Miguel Batista walked Ruiz and pinch-hitter Michael Martinez in succession with the bases loaded to put the Phillies up 5-2 on only two hits.
Rollins' big hit came off Batista and Utley delivered against Maikel Cleto as the Phillies topped their previous best of seven runs in an inning. Cardinals relievers toiled for 64 pitches to get three outs.
Michael Stutes (2-0) won for the second straight outing, his first two major league victories, despite giving up the go-ahead run on Skip Schumaker's sacrifice fly in the seventh.
McClellan allowed a run and five hits in seven innings, throwing 90 pitches in his second outing since he was activated off the 15-day disabled list following a groin injury. The first-year starter and former setup man, who already has set a single-season best with 79 2-3 innings, had surrendered 10 earned runs in nine innings his prior two starts.
After the first three batters Halladay had matched his season high with two walks, but he didn't walk another while keeping the Cardinals off balance.
The Cardinals bunched three of the hits and then needed Ryan Theriot to beat the relay on a potential double-play ball for a 1-0 lead in the fifth. Third baseman Placido Polanco took an extra hop before throwing to second.
NOTES: Halladay, who threw 97 pitches, has allowed one or fewer runs in seven starts. ... McClellan's previous season best had been 75 2-3 innings in 2008 as a rookie setup man. ... Mark Hamilton snapped an 0-for-18 slump with a pinch-hit single off Stutes ahead of Schumaker's sacrifice fly in the seventh. ... St. Louis pitchers totaled a season-worst nine walks. ... Shane Victorino has a 15-game hitting streak against St. Louis pitching.