Jonathan Pettibone continued his impressive pitching during the early stages of his big-league career. Pettibone (3-0) threw a career-high 6 2/3 innings, allowing four hits and two runs (both earned). He struck out three, walked two and hit a pair of batters.
He left with two outs in the seventh, no one on base and a 4-2 lead.
A revived Scott Kazmir was his opponent for Cleveland.
The start was Kazmir's first at Citizens Bank Park since the 2008 World Series, when he went to the mound for the Tampa Bay Rays in Game 5.
Kazmir, once an all-star, found himself pitching in independent baseball last season, but he has returned to the majors and won his previous two starts.
Frandsen, starting in place of Chase Utley at second base, greeted Kazmir with a one-out solo home run in the first.
Cleveland (21-17) got a two-run single up the middle in the second inning by Michael Brantley, driving in Nick Swisher, who had singled, and Carlos Santana, who had doubled.
With two outs and the bases loaded in the third, Indians third baseman Mark Reynolds hit a pop-up in shallow right field that first baseman Ryan Howard dived at, but he dropped the ball barely in foul territory. On the next pitch, Pettibone got out of the inning by getting Reynolds to pop up to Frandsen.
Reynolds entered the game with 11 home runs, tied for the American League lead.
"Getting out of that inning, I was able to build off that and go from there the rest of the game," Pettibone said.
The Phillies took a 3-2 lead in the fourth inning on John Mayberry Jr.'s two-run double to deep center.
Even with the offense showing improvement, the Phillies still are prone to baserunning lapses, one of which occurred in the fifth.
After Frandsen was hit by a pitch to lead off the inning, Michael Young's fly to shallow center was caught by former Phillie Michael Bourn, who made a sliding catch. Frandsen kept running and was easily doubled off first - just your basic 8-4-3 double play.
The Phillies increased the lead to 4-2 on Domonic Brown's seventh home run to lead off the sixth. That also ended Kazmir's evening.
The Phils got out of an eighth-inning jam.
Cleveland shortstop Asdrubal Cabrera opened the eighth with a triple off Antonio Bastardo, who then struck out Swisher looking. Santana walked, putting runners at the corners.
Justin De Fratus replaced Bastardo and got Reynolds to pop out to defensive replacement Freddy Galvis at second for the second out.
"It's a situation I enjoy pitching in and hope to continue doing it - and the more times I succeed, the more comfortable I will get," De Fratus said.
Jeremy Horst replaced De Fratus and struck out Brantley to end the inning.
RBI singles by Mayberry and Galvis provided two more runs in the eighth before Jonathan Papelbon pitched a scoreless ninth inning.
Contact Marc Narducci at firstname.lastname@example.org. Follow @sjnard on Twitter.