Halladay (2-2) allowed two runs, walked two and struck out six to record a complete game. He's had consecutive strong outings after starting the season with two poor ones. The two-time Cy Young Award winner is coming off an injury-plagued, subpar year, but has looked like his old self this week.

"Today was as close as I've felt to where I want to be," Halladay said. "When I stay within myself and execute the mechanics the way they should be done, I feel good where I'm at."

"They put some good swings on the pitches I was making," Garcia said. "No excuse. I just didn't get the job done."

The game was called after a 35-minute rain delay before the bottom of the seventh.

Chase Utley started Philadelphia's big first inning with a two-out walk, snapping the Phillies' unusual streak of four games without drawing one. Michael Young followed with a single. Mayberry ripped an RBI double to left. Then Kevin Frandsen hit a sharp grounder, but third baseman Ty Wigginton made a diving grab. Wigginton, however, made a wild throw to first and the error allowed two runs to score.

"I just pulled it wide left," Wigginton said. "I feel like it's a play I make the majority of time. I don't know if I rushed. I know I didn't really get the grip I'd like to have. It's part of baseball. We were hoping to keep them there. But they started finding the gaps."

Revere ripped an RBI triple to left-center for his first extra-base hit in his 66th at-bat, and Quintero lined an RBI double to make it 5-0.

Utley had an RBI single in the second, and Quintero drove in a run on a single in the third.

The Phillies helped Halladay with excellent defense. Left fielder Freddy Galvis made a diving, backhanded catch on a sharp liner and Revere made a headfirst sliding catch on a ball to shallow center.

"We did some good playing the first few innings," manager Charlie Manuel said.

Halladay allowed 12 runs and 12 hits in 7 1/3 innings in his first two starts. But he was solid against a weak Marlins lineup last Sunday, giving up one run and five hits in eight innings.

The Cardinals were a tougher test. Halladay only made two bad pitches, and Beltran and Holliday got hold of both.

"It's a big difference with a nice lead," Halladay said. "You can be aggressive and attack hitters."

After a rough spring training was followed up by early troubles, many wondered if Halladay was on the decline. He's thrown a ton of innings and is 35. But Halladay knew it was a matter of time before he got the results he wanted.

"I always felt I was going in the right direction," he said. "Once I got a chance to pitch deeper in games, do more bullpens, I felt I was able to take some of that over into the game."

Game notes

Suspended Phillies C Carlos Ruiz was hit on the left wrist in an extended spring game. X-rays were negative and he's day to day. ... The Phillies hadn't scored a run before the sixth inning in their previous seven games. ... Young extended his hitting streak to 10 games. ... Cardinals C Yadier Molina had his first game off this season. Tony Cruz started in his spot. ... RHP Lance Lynn (2-0, 5.40) goes against LHP Cliff Lee (2-0, 1.52) on Saturday night.

Most Complete Games - Active Pitchers

The Phillies have 8 runs through 3 innings, already matching their season high for a game...
They had been held to 3 or fewer runs in EACH of their previous 7 games.
They scored 5 runs in the 1st inning, the first time they've scored BEFORE the 6th inning since last Wednesday (April 10)

Chase Utley drew a walk in the top of the 1st inning, snapping a streak of 137 PA without a walk by Phillies hitters... And the previous walk was an intentional pass.
It snapped a streak of 145 PA without an unintentional walk.
There were 170 different players who drew a walk from Monday-Thursday this week and NONE of them played for the Phillies.