Florida Marlins right-hander Clay Hensley has pitched in 197 games and ranks the latest one last.

Uncharacteristically poor control doomed Hensley on Thursday night, when the Marlins lost to the St. Louis Cardinals 7-4.

"I didn't have any idea where the ball was going. Hands down, the worst I've ever pitched in my entire career," Hensley said. "It's frustrating, because the lack of control that I had tonight could have seriously hurt somebody."

He nearly did, beaning David Freese with his final pitch. That came with the bases loaded in the third inning, forcing in the run that put St. Louis ahead to stay, 4-3.

Freese was hit in the helmet above the left temple and suffered a mild concussion. Hensley phoned Freese and apologized.

"You never want to go out there and hit people, much less in the head," Hensley said. "I talked to him in the locker room over there to make sure he's all right."

Freese said he was still dizzy after the game but feeling better. He said he likely would miss at least one game but didn't expect to be sidelined long.

"A hit in the head is scary," Marlins catcher John Buck said. "These helmets aren't that thick."

Marlins second baseman Omar Infante broke his right middle finger diving for a grounder in the third. It's uncertain how long he will be sidelined.

Hensley (1-4), making his fourth start since joining the rotation from the bullpen, lasted 2 1-3 innings and allowed six runs. His ERA rose from 3.09 to 4.46.

In the first inning, Hensley walked consecutive batters before Matt Holliday homered. Albert Pujols also homered for St. Louis, his 25th.

"We can't give guys free passes — three or four walks and a couple hit batsmen," Marlins manager Jack McKeon said. "They've got guys like Pujols, (Lance) Berkman and Holliday. We can't put guys on in front of those guys and expect not to get burned."

Florida had 14 hits, including five doubles, but stranded 12 runners and hit into two double plays.

The Marlins' odd home-road disparity continued. They are 24-33 at home and 31-23 on the road.

Pujols, who came into the game only 1 for 14 on the Cardinals' trip, finished a triple shy of the cycle.

He walked and scored in the first inning, singled and scored in the third, homered in the fourth and doubled in the sixth. The first baseman also made a lunging backhanded stop to start a 3-6-3 double play.

Six St. Louis relievers limited Florida to one run after Kyle Lohse lasted only three innings — his shortest outing this season — even though his teammates gave him a 7-3 lead. He allowed seven hits and walked three and threw 74 pitches.

Kyle McClellan (9-6) replaced Lohse and pitched three scoreless innings. Lance Lynn struck out the side in the seventh.

Fernando Salas came on to retire Gaby Sanchez on a flyout with the bases loaded to end the eighth, then pitched a perfect ninth for his 20th save in 23 chances.

Holliday hit his 17th home run for St. Louis, while Skip Schumaker had three hits, including a two-run double.

Florida scored three times in the first thanks to four hits, including an RBI double by Infante and a two-run double by Logan Morrison.

Hensley hit Holliday and Freese with pitches in the third. Schumaker then hit a two-run double to put the Cardinals up 6-3.

Infante was hurt when Schumaker's grounder deflected off his right hand before rolling into right field.

Notes: Florida's Wes Helms played 2B for only the second time in his career when he replaced Infante. ... RHP Jake Westbrook, who starts Friday for the Cardinals, is 7-2 in night games this year. ... Florida RHP Anibal Sanchez will seek to snap a career-long slump of nine starts without a win Friday. ... Hensley had not hit a batter previously this year. ... The stadium hosted its third sport in as many nights. The Dolphins practiced there Tuesday, and an international soccer game was played there Wednesday.