St. Louis won its fourth in a row and the Cardinals' offense created plenty of support for Kyle Lohse (5-1).
Lohse worked only five innings, leaving the game after St. Louis had scored twice in the sixth to take a 3-1 lead.
Matt Carpenter's two-run double accounted for the sixth-inning scoring and St. Louis was still clinging to a 3-2 advantage heading into ninth. The Cardinals then broke the game open on a two-run double from Matt Holliday and Craig's homer to right.
Wade Miley (3-1) gave up 10 of the 14 hits and three runs over 5 2/3 innings to take the loss. It was the Diamondbacks' fifth straight setback.
Trader Joe's: Car crashes into Long Island store, injuring 11
Reindeer recovered after escaping from Santa during lighting ceremony