The Mets extended baseball's longest current winning streak to five games even though they were outhit 15-12. The last three wins have come against the Phillies
Philadelphia took a 4-2 lead into the seventh inning, but New York scored eight times over the final three frames.
New York pushed across three runs in the seventh to take the lead, one of them coming on a double by Justin Turner. Lucas Duda was hit by a pitch with the bases loaded later in the inning, forcing in Turner with the second run, and a fielder's choice grounder by Andres Torres accounted for the third score and put the Mets in front.
The homer by Davis keyed a four-run eighth and Torres added a solo homer in the ninth.
Tim Byrdak (2-0) retired the only man he faced in the sixth inning and claimed the victory when New York rallied in the seventh. Kyle Kendrick (0-3) allowed four doubles with two walks and five runs in one-plus inning to take the loss.
New York spoiled the return of Cliff Lee, who made his first start since April 21. He had been on the disabled list after suffering a strained muscle while working 10 innings against San Francisco.
Lee gave up two runs over six innings and was in position to pick up the win until Philadelphia's bull pen was roughed up in the late going.