Marlins 20-year old phenom Jose Fernandez pitched six scoreless innings to outduel Cole Hamels, and Miami (2-9), playing without slugger Giancarlo Stanton for the second straight day because of a bruised left shoulder, became baseball's last team to win two games this year.
Fernandez gave Miami the lead in the fifth with an RBI single.
Placido Polanco led off the ninth with a walk against reliever Phillippe Aumont (1-1). Greg Dobbs followed with a hard-hit grounder to first baseman Kevin Frandsen, who could not make the play. The ball rolled into right field for a hit and Polanco advanced to third.
After Austin Kearns struck out, Coghlan hit a hard grounder to second baseman Chase Utley, playing on the infield grass. Utley bobbled the grounder and his throw was late to the plate as Polanco slid headfirst into home for the winning run.
Steve Cishek (1-1) pitched the ninth.
Fernandez allowed only two hits and two walks while striking out five.
Hamels yielded one run and three hits in six innings. He struck out five and walked three.
Hamels, who came into the game with a 10.97 ERA in his first two starts, held the Marlins without a hit until the fifth inning when Adeiny Hechavarria tripled to right-center field with two outs. Hechavarria's two-out triple was the Marlins' first three-base hit this season and 16th extra-base hit. Miami, which is batting .206, has a paltry .266 slugging percentage.
Fernandez then got his first big league hit to knock in the first run.
Fernandez was pulled after six innings in favor of A.J. Ramos, who promptly allowed a base hit to Domonic Brown, the Phillies' first hit since Freddy Galvis' two-out single in the second.
Second baseman Donovan Solano tried turning the double play but his throw ended up in the stands for an error and allowed Brown to score and make it 1-all.
The Phillies had an opportunity to score in the second inning. Laynce Nix and Galvis both singled with two outs, but Fernandez calmly retired Erik Kratz to get out of the inning.