PHOENIX -- In black magic marker, a scuffed baseball told the details of the biggest game of Stephen Drew's career.
Five hits and a cycle -- the first in Chase Field history.
"I'm kind of in shock right now," said Drew, who carried his keepsake baseball into the postgame interview room. "I'm just trying to put good 'ABs' together. It was meant to be."
Drew wasn't the only Diamondbacks player who had a big day. Newly acquired David Eckstein singled home the winning run, and Adam Dunn, Chris Young and Mark Reynolds also homered as Arizona overcame a poor start by Randy Johnson.
The Diamondbacks needed a lift after losing two out of three over the weekend to NL West rival Los Angeles. Arizona entered Monday with a shaky 2½-game lead over the Dodgers.
"To hit for the cycle, it's fun, but it wouldn't have really meant anything to me if we didn't win," Drew said.
Batting leadoff, the 25-year-old shortstop singled in the first, tripled in the third and homered in the fifth against St. Louis Cardinals starter Joel Pineiro. He hit a ground-rule double in the seventh against reliever Kyle McClellan (2-7) as the Chase Field crowd rose for a standing ovation.
Drew added another double in the eighth for his fifth hit, matching a career high and a franchise record.
"It seems like he gets a good at-bat every time up," Arizona manager Bob Melvin said. "Five hits, cycle, the whole bit -- it's certainly going to be a day that he's going to remember. You don't get too many like this. It'll be one of the most exciting offensive days of his life."
Drew is 10-for-17 with a homer, three doubles and a triple in the first four games of a six-game homestand.
"The ball just comes off his bat like lightning," Eckstein said.
Drew also became the third Diamondbacks player to hit for the cycle in the franchise's 11-year history. Luis Gonzalez did it on July 5, 2000, at Houston and Greg Colbrunn did it on Sept. 18, 2002, at San Diego.
It wasn't such a big deal in the St. Louis clubhouse. Asked to comment on Drew's performance, Cardinals manager Tony La Russa replied, "Let Melvin talk about him."
La Russa wasn't very happy after watching his team cough up a 5-1 second inning lead on its way to its fourth straight loss. The Diamondbacks chipped away at Pineiro, who allowed four runs and six hits in five innings.
Arizona tied it at 6-6 in the sixth, when Reynolds hit a two-run shot on the first pitch from McClellan.
"You can't lose a game like this," La Russa said. "But every time we got the ball where we shouldn't, they hit it out of the park. We made to many mistakes to win a game like this."
Pineiro said he struggled to put hitters away.
"I had guys 0-2, 1-2," he said. "Sometimes you've got to tip your cap to the hitters, but I've still got to make a better pitch to finish them off, and I wasn't able to do that."
The Diamondbacks took the lead for the first time in the seventh on a single by Eckstein, who was acquired from Toronto on Sunday and started at second base. Another run scored on a wild pitch by Russ Springer.
"We just kept pecking away and pecking away," Eckstein said. "No one let up or gave up."
The Diamondbacks' rally spared Johnson his 10th loss.
One day after ace Brandon Webb lasted only 3 1/3 innings, the Diamondbacks needed a lengthy outing from Johnson. But the Big Unit lasted only 3 2/3 innings, matching his shortest start of the season.
Johnson, who has 294 career victories, is winless in his last four starts.
Johnson gave up four homers, matching a career high, and they traveled an estimated 1,598 feet, combined.
In the third, Albert Pujols hit a 416-foot bullet deep into the left field bleachers with a man aboard to give the Cardinals a 4-1 lead. Two batters later, Felipe Lopez hit a 398-foot solo homer to left, and St. Louis led 5-1.
- Upton left the game after being hit in the head with a pickoff attempt by St. Louis pitcher Adam Thompson in the eighth. Upton stayed on the ground for several minutes before walking off under his own power. "I was a little dizzy," Upton said. "It was definitely a scary moment." He said he expects to play on Tuesday night.
- Arizona RHP Jon Rauch was ejected by home plate umpire Dan Iassogna as Rauch walked off the mound in the middle of the sixth.
- Mather left after four innings with a sprained left wrist. Mather said he would see a hand specialist on Tuesday, and he wasn't optimistic about returning this season. "Hopefully, it's not as bad as it looks," Mather said.