PHOENIX -- Timely hitting has been a rarity for the San Francisco Giants, until Sunday anyway.
After dropping nine in a row to the Diamondbacks, the Giants won the last two of the three-game series to leave town at .500 (17-17).
"We had some good at-bats there," San Francisco manager Bruce Bochy said. "Guys did a nice job on this trip bouncing back. This has been a tough place for us."
Jason Kubel went 3 for 4 with a pair of doubles and drove in two runs for the Diamondbacks, who finished their homestand 1-5.
"It was a tough week, a tough homestand," said manager Kirk Gibson, whose team was swept by St. Louis before the Giants came in. "We didn't play well. We got our butts kicked. Not very good execution again, anywhere."
San Francisco had a season-high 14 hits, 10 of them against starter Joe Saunders (2-3).
Zito allowed three runs and five hits in six innings. He struck out five, walked three and hit a batter with a pitch.
"I was kind of in and out today. I got into some jams but was able to pitch out," Zito said. "It wasn't a great day for me as far as stuff goes, but the curveball bailed me out a few times."
The left-hander entered with a 2.21 ERA but, thanks mostly to a lack of offensive support, had not won since a 7-0 shutout at Colorado on April 8. Zito has not given up more than three runs in any of his seven starts.
"It's been good, contributing the best I can this year," Zito said. "I don't feel like I've made any kind of statement and I won't until the year is over. I've got a lot of work to do. I'm off to a decent start but I can't take anything for granted."
Cabrera hit .500 on the seven-game road trip (13 for 26).
"He's on fire," Bochy said, "from both sides. He's a good hitter. He had a breakout year last year and we're excited to have him, believe me. He's a smart hitter, can go with the pitch and he can hit the ball out of the ballpark, too. He threw up some great at-bats today, all series really."
Saunders had his second rough outing in a row after a fast start to the season, giving up six runs in five innings.
"I am making good pitches and they are just hitting where we are not," Saunders said. "It is pretty frustrating. You see the frustration with everybody right now. We are going through a bad stretch."
The left-hander retired his first seven batters before running into trouble. Brandon Crawford doubled, then with two outs consecutive singles by Blanco, Joaquin Arias and Cabrera brought in two runs in the third inning.
The Diamondbacks, up briefly 1-0 on Kubel's RBI single in the second, cut the Giants' lead to 4-3 in the fourth. Ryan Roberts led off with a single, was sacrificed to second by Saunders' bunt and scored when A.J. Pollock doubled over the head of Blanco in right. Kubel followed with his second double of the game to bring home Pollock.
The Giants padded the lead their next time up. Cabrera, whose four-hit game matched his career best, led off the fifth with a single, then Pill hit the next pitch into the left-field seats and San Francisco led 6-3. Sanchez's RBI single made it 7-3 in the seventh.
Jeremy Affeldt, activated from the 15-day disabled list before the game (right knee strain), pitched a scoreless eighth.
Cabrera is tied with Yankees SS Derek Jeter for the most multihit games this season (17). ... The Diamondbacks have lost 12 of their last 15 home games. ... Giants 2B Charlie Culberson, called up from Triple-A Fresno, was in the lineup and went 1 for 4 in his major league debut, singling in the fifth for his first big league hit. ... Arizona opens a three-game series at Los Angeles on Monday night, sending Ian Kennedy (3-2, 3.91 ERA) to the mound against Dodgers ace Clayton Kershaw (2-1, 2.56). San Francisco is home against Colorado. Ryan Vogelsong (1-2, 2.94) goes for the Giants, and Christian Friedrich (1-0, 1.50) for the Rockies. ... After allowing five earned runs in his first five starts, Saunders has given up 12 in his last two.