Shane Robinson went 3-for-4 with two RBI and a run scored. Craig and Jhonny Peralta both contributed two hits and a run scored for the Cardinals, who have won seven of their last eight.
Pat Neshek (1-0) earned the win after allowing just one hit over two scoreless innings in relief of starter Lance Lynn, who surrendered two runs on seven hits with six strikeouts in six frames.
“You don’t ever expect to be right around .500 with this club we have,” said Lynn. “For us to come in at home on our first true homestand of the year and go like this, it’s good for us.”
Paul Goldschmidt and Aaron Hill both drove in a run as Arizona dropped its third straight game. Wade Miley (3-5) was tagged with the loss after giving up three runs on seven hits with four walks in 6 2/3 innings.
The Diamondbacks started the scoring in the game’s opening frame. Gerardo Parra led off with a single to right and Martin Prado walked before Goldschmidt’s line-drive single to right plated Parra and moved Prado to third. Hill’s sacrifice fly to right brought Prado around and made it a 2-0 game.
“We weren’t able to tack on,” Arizona manager Kirk Gibson said. “We didn’t tack on and that ended up costing us.”
The Cardinals loaded the bases with two outs in the second. Peralta walked before Robinson singled and Mark Ellis was also issued a free pass. Lynn grounded into a fielder’s choice as the D-backs escaped unscathed.
Robinson evened the game at two with two outs in the sixth. Craig reached on a fielding error and two batters later, Peralta doubled to left. Robinson stroked a bases-clearing double to center to knot the score.
St. Louis took a 3-2 lead an inning later. Holliday reached on a two-out walk and hustled home on Craig’s line-drive double to center.
Matt Carpenter added an insurance run for the Cardinals in the eighth as his line drive dropped into shallow center field and plated Robinson from second.
Trevor Rosenthal set the Diamondbacks down in order in the ninth to secure his 14th save of the season.