The Cardinals needed a win. Their defense and the 49ers obliged.
The 49ers scored first, but the Cardinals flexed their muscle from there and went on to score an important road win Thursday night, 33-21.
Drew Stanton threw two touchdown passes to Larry Fitzgerald, but the Cardinals took control by forcing turnovers and running David Johnson right at an overmatched defense. Johnson ended up rushing for 157 yards and two touchdowns.
The Cardinals sacked 49ers quarterback Blaine Gabbert seven times and intercepted him twice, both leading to points.
The game started with seven consecutive punts before the offenses got rolling. Fitzgerald caught a 21-yard touchdown pass late in the first half to tie the game, then caught a 29-yard touchdown pass in the third quarter to make it 21-7.
The teams traded scores from there, but Marcus Cooper’s interception set up a field goal to make it 24-14, then Johnson’s second touchdown run with 4:44 left made it 31-14 and basically sealed it. The 49ers scored again, then the Cardinals tacked on a safety on a Calais Campbell sack in the final 90 minutes.
Campbell also had an interception to set up Fitzgerald’s first touchdown.
Gabbert threw for 162 yards. Jeremy Kerley caught eight passes for 102 yards and became the first 49ers players in 15 games to go over 100 yards receiving.
Stanton was only 11-of-28 for 124 yards but he didn’t turn the ball over. Fitzgerald caught six passes for 81 yards.
The Cardinals snap a two-game losing streak and improve to 2-3. The 49ers, losers of four straight, are 1-4.
The Cardinals host the Jets Oct. 17 on Monday Night Football. The 49ers are at the Bills Oct. 16.