Cardinals escape with win on Catanzaro's field goal

GLENDALE, Ariz. -- This time, Chandler Catanzaro connected.

Catanzaro kicked a 34-yard field goal as time expired, sending the Arizona Cardinals to a 23-20 victory over the San Francisco 49ers on Sunday.

Catanzaro missed twice on game-winning field goal tries earlier in the season -- a 47-yarder against New England and, most memorably, a 24-yarder in overtime of a 6-6 tie against Seattle.

"The past couple haven't gone in, but I wanted this opportunity," he said. "I just got on my kicking net, took a couple of deep breaths, definitely said a couple of prayers."

This attempt was right down the middle as Arizona (4-4-1) narrowly averted a devastating loss.

"It was a game where I thought we had it in hand," Cardinals coach Bruce Arians said, "and gave it back and then weathered a storm and won it."

The 49ers (1-8) lost their eighth in a row despite a strong game by Colin Kaepernick, who tied it at 20 with a 4-yard TD run with 1:55 to play .

That was enough time for Carson Palmer to gain redemption after three second-half turnovers, including an interception by Gerald Hodges that led to the tying touchdown.

"I was just mad at myself for putting our defense in that situation and putting our team in that situation," Palmer said. "I can't do that. They made the plays they needed to to get in the end zone, and we made the plays when we needed to to get back down there and get the field goal."

Palmer completed 4 of 7 passes for 64 yards, including a leaping 26-yard sideline grab by Michael Floyd, as the Cardinals drove from their 15 to the San Francisco 16 to set up the winning kick.

Against the league's No. 32-ranked rush defense, the Cardinals' David Johnson was held to 55 yards on 19 carries.

Johnson finished with 101 yards from scrimmage, thanks to that late drive, for his ninth straight game of at least 100 total yards. He scored on a 3-yard reception and an 18-yard run , hitting the pylon with the ball in his outstretched arms as he slid out of bounds.

Kaepernick, returning to the scene of one of the worst games of his career a season ago, completed 17 of 30 passes for 210 yards and ran 10 times for 55 yards.

"Every week that I get more reps, every day that I get more reps, it is more and more comfortable," he said. "At this point when (coach) Chip (Kelly) is calling a play, I know what they are."

Larry Fitzgerald caught 12 passes for 133 yards for Arizona, and Floyd had five receptions for 101 yards in his best game of what has been a difficult season.

Palmer was 30 of 49 for a season-high 376 yards and a touchdown, but the turnovers were almost his undoing.

Arizona, coming off a bye week after a one-sided loss at Carolina, jumped to a 14-0 lead and had a 20-10 advantage at the break, but couldn't shake the 49ers.

"It hurts," Kelly said. "As tough as they just played, it's tough to give them words to make them feel better."

After struggling throughout the first half of the season, with a few untimely dropped passes and no big plays, Floyd was back to his old self in this one.

The fourth-year receiver from Notre Dame entered with 19 catches in eight games, 37 fewer than team-leading Fitzgerald.

"I had to regroup mentally," Floyd said. "I had to tell myself it was like playing in the sixth grade, just going out there and making plays."

It was the first time Kaepernick played in Arizona since his awful performance a year ago. In that 47-7 loss, two of his first four passes were intercepted and returned for touchdowns. In all, he was intercepted four times that day.

This, his fourth start of the season, was his best this year.

With his 42nd career 100-yard receiving game, Fitzgerald kept moving up on the NFL career lists.

Fitzgerald moved ahead of Terrell Owens into sixth place on the list for receptions. He also became the third-youngest player in league history to reach 14,000 yards receiving.