Halladay (5-6) allowed just four runners and struck out five to earn his first win since May 17. The two-time Cy Young Award winner was winless in his previous five starts, including three after returning from a two-month stint on the disabled list.
"The last two games I feel things are going in the right direction," Halladay said. "I made some changes and it's nice to see the results, nice to see it pay off."
|More on Diamondbacks-Phillies|
|More MLB coverage|
Joe Saunders (5-8) was the hard-luck loser for Arizona, which had its four-game winning streak snapped. The lefty allowed two runs and six hits in 6 1-3 innings.
The Diamondbacks had won 13 of 18 to get within two games of NL West-leading San Francisco.
"He's Roy Halladay," Saunders said. "You just turn the page and come back tomorrow."
The Phillies learned they'll be without All-Star catcher Carlos Ruiz for the next four to six weeks because he has plantar fasciitis in his left foot. Ruiz leads the team with a .335 average and has career highs of 14 homers and 58 RBI.
It was the latest blow for the five-time defending NL East champions, who are stuck in last place. The cost-cutting Phillies traded two-time All-Star outfielders Hunter Pence and Shane Victorino and pitcher Joe Blanton in the past five days.
Kratz filled in nicely for Ruiz, however.
He drove a 2-0 pitch out to left for his fourth homer in just 24 at-bats to give the Phillies a 1-0 lead in the third.
Kratz came up with the bases loaded in the fourth after Domonic Brown worked a walk in a 10-pitch at-bat. Kratz also walked to force in a run and make it 2-0.
Then Kratz showed off his arm.
From his knees, he threw out Gerardo Parra trying to steal second to end the top of the eighth.
"He's been good for us, of course," Phillies manager Charlie Manuel said. "He's improved his hitting 100 percent since I saw him two years ago. He's strong, he's durable, he's hungry to play in the big leagues. I like everything about him."
Kratz joked about Manuel's comments regarding his hitting.
"It's a nice compliment. I guess I was a terrible hitter before," he said.
While Kratz had a breakout game, his batterymate looked like his old self. Halladay pitched like an eight-time All-Star instead of the guy who entered with a 4.33 ERA.
Halladay's velocity was up -- he topped out at 93 mph in the first inning -- and he threw an assortment of off-speed pitches and an effective cutter to keep the Diamondbacks off balance.
With the Phillies seemingly going nowhere this season, there's been talk that Halladay would be shut down early to rest for 2013. He wants none of that.
"I want to pitch. I'm here to pitch. I don't need rest," he said.
Brown gave the Phillies an insurance run with a two-out RBI single in the eighth.
- The Phillies have won 10 of their last 12 home games vs. Arizona.
- Philadelphia's bullpen has an NL-best 1.22 ERA since July 20.
- Jimmy Rollins was the only starter for the Phillies who was in the opening-day lineup.
- Arizona's John McDonald was 0 for 3 and is in a 4-for-34 slump.
- The Diamondbacks have scored three runs or fewer in 10 of the last 12 games in Philadelphia.
- The Phillies had their 272nd straight sellout, including postseason games.
- Philadelphia LHP Cliff Lee (2-6, 3.73 ERA) faces Trevor Cahill (9-9, 3.75) in the series finale Sunday. Lee is seeking his second straight win.