PHOENIX -- Scott Spiezio has made the most of his limited opportunities.
Spiezio, given a spot start in place of Scott Rolen at third base, homered twice to back Jeff Weaver and give the St. Louis Cardinals a 6-2 victory over Arizona on Thursday night, the Diamondbacks' eighth loss in nine games.
"I've done it in the past here and there," Spiezio said of his backup role. "I've had some time where I learned how to do it. As you get older, you learn more and know what you need to do to get it done."
Spiezio is hitting .270 in 99 games, only 43 of which have been starts.
"He's been a successful pinch-hitter but he's really been good when he starts," St. Louis manager Tony La Russa said.
Juan Encarnacion added an RBI single and Chris Duncan also drove in a run for the Cardinals, who opened a 6½-game lead over Cincinnati in the NL Central.
Luis Gonzalez homered for the Diamondbacks, who have lost 16 of 20 and fell a season-worst 10 games under .500 at 65-75.
Weaver (3-4) gave up two runs and five hits in five innings.
"I've finally found that arm slot I've been searching for for a while," Weaver said. "I couldn't locate my curveball where I wanted, and they were able to hit it. Luckily, I had some right-handed hitters come up in crucial situations."
Arizona had runners on second and third with no outs in the fourth but Weaver struck out Tony Clark and, after an intentional walk to Stephen Drew, retired Miguel Batista on a 3-2 forceout and got Chris Young on a groundout.
"The biggest key of the game is how he avoided the big crooked number," La Russa said.
Batista (10-6) allowed five runs and six hits in six innings. He had been 4-0 in 13 starts since losing to Tampa Bay on June 20, getting four straight no-decisions.
"I haven't been fortunate enough to win a game in the last two months almost," Batista said. "I can't afford to give up that many runs. I missed my location quite a few times today."
Duncan's RBI single and Spiezio's two-run homer put St. Louis ahead in the first, but Gonzalez's 15th homer cut the gap to 3-2 in the third. Yadier Molina scored on rookie Miguel Montero's passed ball in the fifth, and Encarnacion followed with a single that made it 5-2.
"We had a couple of chances, but we couldn't get the hit early in the game, especially when the game was close," Gonzalez said. "We couldn't find a way to get that big hit to put us that much closer and get us over the top."
Spiezio hit his 11th homer of the season in the eighth, a drive off Jorge Julio that went over the St. Louis bullpen in right. It was the seventh two-homer game for Spiezio, the first since May 13, 2003, against the New York Yankees.
- Johnny Estrada was hit by a pitch in the fourth, then left with a bruised right forearm and was replaced by Montero. Estrada is day to day.
- St. Louis has won 19 of 30 at Arizona.
- Gonzalez hit his 47th double of the season in the first, matching the club record he established in 2000. Gonzalez also pulled even with Harry Heinemann for 21st place on baseball's career list with his 542nd double.
- Cardinals INF John Nelson struck out as a pinch-hitter in the ninth in his major league debut.
- Arizona has been outscored 132-65 in the first inning.