Drew Stanton threw two touchdown passes to Larry Fitzgerald in his first start in two years, David Johnson ran for two scores and the Arizona Cardinals capitalized on San Francisco mistakes to beat the 49ers 33-21.
The Cardinals (2-3) got 17 points off three turnovers by the 49ers (1-4) - two interceptions by Blaine Gabbert and a fumbled kickoff return by Chris Davis - and also had one drive extended by a running-into-the-kicker penalty.
Those three scoring drives totaled just 41 yards, but proved to be enough to beat the sloppy 49ers as the Cardinals survived a week without injured starting quarterback Carson Palmer.
Stanton didn't produce much with Palmer sidelined by a concussion, going 11 for 27 for 124 yards. But Arizona didn't turn the ball over and got 157 yards rushing from Johnson to get the win.
Calais Campbell's interception of a deflected pass set up Arizona's first score on a 21-yard pass from Stanton to Fitzgerald late in the second quarter.
Davis' fumble of the second-half kickoff then set up Johnson's 4-yard run that put Arizona up for good.
Stanton then led his only long scoring drive of the night capped by a 29-yard pass to Fitzgerald to make it 21-7 and Marcus Cooper's interception off Gabbert set up a 36-yard field goal by Chandler Catanzaro.
There were several thousand empty seats at the game but the fans who did show up were frustrated by what they saw. At one point in the third quarter, a chant of "We want Kap! We want Kap!" started up as fans wanted to give former starter Colin Kaepernick a shot at quarterback. Gabbert responded by leading an 82-yard TD drive fueled in part by his 24-yard run .
The chants started again after Gabbert threw his second interception .
Jeremy Kerley, acquired two weeks before the start of the season in a trade with Detroit, has quickly established himself as Gabbert's most trusted receiver. After nine straight punts to open the game, Gabbert completed four passes for 63 yards on one drive in the second quarter, capped by a 9-yard TD pass to Kerley .
The first quarter featured six drives, six punts, zero points and only five completed passes as both offenses struggled mightily. Gabbert and Stanton missed open receivers, had other throws dropped and neither offense could generate much of anything.
Markus Golden and Campbell each had two of Arizona's seven sacks as the Cardinals put constant pressure on Gabbert. Pass protection had been one of the few positives on offense for the 49ers, who had allowed just three sacks the first four games.