Carlos Beltran homered for the third straight game and Lance Lynn allowed one hit in seven innings to power visiting St. Louis.
Allen Craig had a two-run single while red-hot Yadier Molina had three hits, including a run-scoring single during the Cardinals' four-run third inning.
Lynn (3-0), who recorded eight strikeouts, didn't allow a hit until John Mayberry Jr. led off the fifth inning with a double.
Cliff Lee (2-1) yielded five runs and seven hits in five innings while walking three - all in the third inning - for Philadelphia, which has lost five of its last six games.
The Phillies finished with three hits.
After Lee alternated issuing walks and recording outs to start the third, Craig drove in Pete Kozma and Shane Robinson with a single to center.
Molina, who is 12-for-27 in his last seven games, followed with a hit to right to plate Matt Holliday and David Freese's single to right brought Craig home to make it 4-0.
Beltran led off the fifth inning by crushing Lee's 1-0 fastball into the left field seats. It was his 338th career homer, tying him with the Yankees' Mark Teixeira for sixth all-time among switch hitters. Mickey Mantle leads with 536.
GAME NOTEBOOK: Phillies 1B Ryan Howard missed his second straight game because of tightness in his right groin. ... Lee, who entered the game with one walk in 23 2/3 innings this season, hadn't walked three batters in a game in his last 22 starts dating to June 24. ... Philadelphia 3B Michael Young went 1-for-4 to extend his hitting streak to 11 games.
Distributed by Internet Broadcasting and The Sports Xchange. This material may not be published, broadcast, rewritten or redistributed.