Craig's blast in the third put St. Louis ahead 3-0 but the Pirates came back with four in the next half-inning, highlighted by Michael McKenry's three-run clout.
Jake Westbrook (7-6) earned the victory despite yielding four runs on nine hits over six full frames.
Marc Rzepczynski and Mitchell Boggs combined for 1 2/3 scoreless relief frames, and Jason Motte got the final four outs for his 17th save as the Cards avoided a three-game sweep at the hands of the Pirates.
Bedard lasted only 4 2/3 innings, allowing five runs on eight hits.
Jessica Simpson shares three-way kiss with friends in photo
Scarlett Johansson steps out with fiance after pregnancy reveal