ATLANTA -- Brandon Phillips poked a single through a five-man infield in the ninth inning to produce a walk-off hit for the second straight game and lift the Atlanta Braves to a 5-4 win over the Miami Marlins

The rally began against Miami rookie Drew Steckenrider (0-1) when Johan Camargo reached on a one-out single that third baseman Derek Dietrich could not field. Ender Inciarte lobbed an opposite-field single to left, sending Camargo to third.

The Marlins brought left fielder Marcell Ozuna in for an extra infielder, but Phillips found a hole between shortstop J.T. Riddle and the second-base bag that drove in Camargo with the winning run.

It was the eighth career walk-off hit for Phillips and the 11th time Atlanta has won a game in its last at-bat this season.

The winning pitcher was Jim Johnson (5-1), who pitched a scoreless ninth inning in relief.

Neither starting pitcher received a decision.

Atlanta's Mike Foltynewicz bounced back from his worst outing of the season -- eight runs in 3 1/3 innings against Washington -- to give up two innings over six innings. Foltynewiciz allowed seven hits and two walks, with four strikeouts and received no decision.

Miami's Jose Urena, who was seeking his fifth straight win, pitched six innings and allowed two runs on three hits and two walks, with four strikeouts. Urena retired 12 of 13 batters from the second through fifth innings.

The Marlins broke through for two runs in the sixth inning against Folytnewicz. With one out, Justin Bour ripped an 0-2 pitch just out of the reach of Atlanta shortstop Dansby Swanson to drive in Dee Gordon and Christian Yelich.

Atlanta scored four times in the seventh to take a 4-2 lead. Rio Ruiz had a sacrifice fly, Camargo drove in a run with a pinch-hit single and Nick Markakis added a two-run opposite-field single.

Miami tied the game a 4-4 against reliever Jose Ramirez in the eighth inning. Yelich walked and Ozuna hit a long two-run homer, his 18th, into the visitor's bullpen in left field.

Both teams wasted early opportunities.

Atlanta loaded the bases with no out in the second inning, but the bottom of the order couldn't provide an RBI. Miami had runners on the corners with one out in the third when Giancarlo Stanton struck out into a double play, with J.T. Riddle being erased in a rundown while trying to score from third base.

NOTES: Atlanta LF Matt Kemp returned to the starting line. Kemp left the game on June 14 with left hamstring tightness and missed two starts. ... Miami RHP Jose Urena tied a club record when he hit three batters on Sunday. It was the 10th time it has occurred, the last coming on May 27, 2016, when Adam Conley hit three Braves. ... Miami CF Christian Yelich extended his season-best hitting streak to nine games with a single in the fourth inning. ... Miami 2B Dee Gordon now has an eight-game hitting streak in Atlanta. ... Atlanta manager Brian Snitker was ejected for arguing with home plate umpire Chris Segal in the sixth inning. It was his second ejection of the season.