Luis Avilan (4-0), one of seven Atlanta pitchers, tossed a scoreless 11th inning to earn the win and Craig Kimbrel got the last three outs for his 33rd save in 36 chances as the Braves won for the 11th time in 13 games.
Phillies left-hander Jake Diekman (0-2) pitched a perfect 11th but ran into trouble in the 12th. Justin Upton walked leading off and went to second on Freddie Freeman's groundout. After an intentional walk to Evan Gattis, Diekman walked Paul Janish, a career .215 hitter, on four pitches to load the bases.
Justin De Fratus replaced Diekman and Uggla hit a bounding ball to short that looked like it could be a double play, but Uggla was safe at first when Chase Utley's relay pulled an extended Kevin Frandsen off the bag. Utley withstood a strong takeout slide from Janish, who made contact with the Philadelphia second baseman.
John Mayberry Jr. homered for Philadelphia, which has lost four in a row and 12 of 13.
The Phillies did threaten in the 12th off Kimbrel, as Jimmy Rollins reached second with two outs on a fielder's choice and wild pitch. But Kimbrel struck out pinch-hitter Laynce Nix to record his 23rd straight save.
Justin Upton homered for the Braves.
Atlanta took a 4-3 lead with a three-run fifth highlighted by Freeman's two-run single. But Rollins tied it with a two-out double in the seventh off reliever Luis Ayala that scored Mayberry. That hit closed the book on Brandon Beachy, who gave up three earned runs on five hits in 6 1-3 innings in his second start this season following Tommy John surgery.
Beachy was 5-5 with a 2.00 ERA in 13 starts last season before having surgery June 21, 2012. He struggled in his return to the big leagues, allowing seven runs on eight hits in 3 2-3 innings Monday against Colorado. Beachy, who struck out four and walked two, lowered his ERA to 9.00.
The Phillies took a 3-0 lead on Utley's RBI groundout in the first and Mayberry's two-run homer in the second. Upton brought the Braves within two runs with a solo shot in the third before Atlanta's three-run fifth.
John Lannan allowed two earned runs and four hits in 4 1-3 innings with a two walks and no strikeouts. Lannan was pitching on three days' rest after rookie Jonathan Pettibone, who was scheduled to start Saturday, was placed on the DL on Friday with a right shoulder strain.
Phillies closer Jonathan Papelbon entered to boos in the ninth inning but left to cheers with a 1-2-3 frame that featured two strikeouts. Papelbon has blown six of his last 13 save opportunities and has made critical comments of the team in recent weeks.
Atlanta got a runner in scoring position in the 10th off Antonio Bastardo when Chris Johnson and Uggla walked with two outs, but the left-hander struck out B.J. Upton to end the threat.
Frandsen nearly ended it leading off the 10th when he ripped the first pitch to left off David Carpenter, but Justin Upton caught it while backing into the wall in left-center. And Scott Downs came in to get the final two outs of the inning.