ST. LOUIS — Kyle Lohse beat the Miami Marlins with seven innings of three-hit ball in 106-degree heat and Tony Cruz hit a go-ahead two-run triple in the St. Louis Cardinals' 3-2 victory on Saturday.
Allen Craig had three hits and Skip Schumaker added an RBI single in the fourth for the Cardinals, who have won five of seven and snapped the Marlins' three-game winning streak.
David Freese was hit by a pitch twice, walked and singled to reach base safely in all four trips.
Justin Ruggiano hit a two-run home run for the Marlins, who missed a chance to climb back to .500. Carlos Zambrano (4-7) lasted just five innings and Giancarlo Stanton lasted just two before leaving with right knee soreness, the injury that had kept him out four straight starts.
Jose Reyes, Hanley Ramirez and Carlos Lee, the top three in the Miami lineup, were a combined 0 for 11 with a walk and are 1 for 22 with two walks the first two games of a three-game set heading into the All-Star break.
Lohse (9-2) is 3-0 with a 2.08 ERA in three starts against Miami, allowing nine hits in 21 2/3 innings, and found his stride after Ruggiano's home run with one out in the third. The Marlins had two base runners the last five innings on a walk and a fielding error by Craig at first that was wiped clean when Reyes was caught flat-footed, getting picked off to end the fifth.
Lohse has won his past three starts overall and has worked seven or more innings six straight times.
Jason Motte allowed a pair of two-out singles in the ninth before getting Donovan Solano to foul out to end it for his 20th save.
Stanton singled to start the second and with one out Ruggiano hit his sixth home run, a drive to left-center to put the Marlins ahead. Ruggiano has 18 hits during a 10-game hitting streak.
The Cardinals stranded four runners the first three innings before getting to Zambrano in the fourth with the first four batters reaching safely. Schumaker hit an RBI single and scored when Cruz followed with an opposite-field drive into the right field corner that scooted past Ruggiano's attempt to cut off the ball.
Cruz has started the past two games in place of All-Star Yadier Molina, who returned to Puerto Rico on bereavement leave following the death of his wife's grandfather.
Zambrano lost for the first time at seven-year-old Busch Stadium after entering 6-0 in seven starts with a 1.73 ERA, the lowest among active pitchers at the ballpark. He lost for the second time in nine career decisions overall in St. Louis.
Marlins reliever Wade LeBlanc struck out the Cardinals' 3-4-5 hitters in the seventh and allowed one hit in three scoreless innings.