Garza (2-1) gave up a pop-fly single to Jimmy Rollins leading off the first and nothing more.
Garza retired 20 of the next 21 batters, with Juan Pierre's seventh-inning walk accounting for the only other baserunner.
After reliever Rafael Dolis pitched a perfect eighth, Cubs closer Carlos Marmol was shaky in the ninth.
Marmol walked a pair and Hunter Pence's infield single with two outs loaded the bases. Marmol then walked Ty Wigginton to force home a run before getting Shane Victorino on a game-ending groundout.
Besides Rollins' single, the Phillies didn't have anything even close to a hit off Garza, who was lifted after 103 pitches.
Joe Mather homered and Bryan LaHair doubled twice for the Cubs. Jeff Baker and Tony Campana each added two hits.
Kyle Kendrick (0-2), making his second start in place of injured left-hander Cliff Lee, allowed two earned runs and five hits in six innings. He matched his career high with seven strikeouts.
Once again, the Phillies' short-handed offense wasn't able to provide much run support for its starters. Philadelphia has scored two runs or less in 12 of 22 games this season.
The Cubs took a 1-0 lead in the second on Ian Stewart's groundout that scored LaHair. Chicago could have tallied more, with runners on second and third with one out, but Kendrick struck out Welington Castillo and Garza to escape further trouble.
Chicago tacked on a run in the third, thanks to the speed of Campana. After he singled, Campana went to second when Laynce Nix failed to catch Kendrick's throw on a pickoff attempt, then to third on Darwin Barney's groundout.
Campana scored on Starlin Castro's fly ball to medium right field, just beating the strong throw of Pence. Philadelphia manager Charlie Manuel came out to argue the safe call of plate umpire Bill Miller, but replays appeared to confirm the call was correct.
Mather's line-drive homer to left with two outs in the fourth put Chicago up 3-0.
Campana's speed showed up again in the eighth when he reached on an infield single, stole second went to third on a sacrifice bunt and scored on Castro's grounder that didn't even reach the infield dirt.
NOTES: The crowd of 45,550 was Phillies' 229th straight sellout, including postseason play. ... Wigginton went 0 for 3, ending his 13-game hitting streak. ... Garza has pitched eight complete games and three shutouts in 154 career starts, including a no-hitter on July 26, 2010 as a member of Tampa Bay against Detroit.