ST. LOUIS (AP) — Kyle McClellan began the year at the end of the St. Louis Cardinals’ rotation. Now, the former setup man has jumped ahead of everyone in the National League.

The first-year starter became the NL’s first six-game winner after working eight strong innings in a 4-2 victory over the Houston Astros on Thursday. McClellan pounded the strike zone and did not go to a three-ball count on any of the 29 batters he faced.

"I don’t know what my pitch count was, but I thought I was throwing a lot of strikes," McClellan said. "That’s when I’m at my best, locating down in the zone."

Backup catcher Gerald Laird made his 10th start of the season count with a two-run double and Allen Craig homered in a three-hit game as the stand-in cleanup batter for injured Matt Holliday. The Cardinals completed a 4-0 homestand behind stingy pitching that allowed only five runs. They jumped a half-game ahead of the Reds atop the NL Central and are a season-best seven games over .500 at 26-19.

"When we don’t show up with our offense, they show up with their pitching," Albert Pujols said. "We put up two or three runs and it almost looks like the game is over."

Holliday said he probably could play Friday night at Kansas City. Lance Berkman also was out with a sprained right wrist and is likely to miss at least a few more games.

"It’s like spraining your ankle," Berkman said. "As soon as it feels better to run, you can run."

J.A. Happ (3-5) had a season-high eight strikeouts for the Astros, allowing three runs in six innings. Houston has lost five in a row, totaling just 29 hits while getting outscored 22-10.

The Astros had six hits in both games against St. Louis and were 2 for 25 with runners on base in the series.

"When you don’t get timely hits, you don’t get a lot of runs," manager Brad Mills said. "Yeah, you’re going to have some frustration. There’s no doubt about it."

Pujols was 0 for 3 with a walk and has gone a career-high 91 at-bats and 104 plate appearances since his last home run. Pujols has been stuck on seven homers since April 23 and the homerless drought tops his previous worst of 89 at-bats at the end of the 2009 season when he led the NL with 47.

"I feel pretty good," Pujols said. "So I think something’s coming."

After the start was delayed 55 minutes by rain, McClellan (6-1) allowed two runs with five strikeouts and no walks. He retired the first 10 in order before Clint Barmes doubled with one out in the fourth for the Astros’ first baserunner.

Barmes went to third on Hunter Pence’s single and scored on Carlos Lee’s sacrifice fly.

McClellan hurt himself in the eighth with two wild pitches, doubling his season total. The second allowed Humberto Quintero to score the Astros’ second run.

The previous three seasons McClellan had been a setup man, and he replaced injured Adam Wainwright in the rotation this year. The right-hander has worked eight innings in two of his last three starts and he bounced back from his first loss in his previous appearance.

Fernando Salas worked the ninth for his fifth save in five chances.

The Cardinals opened the second with a single, walk and Laird’s fifth double of the season — one more than Pujols in only his 43rd at-bat — off the base of the left-field wall. Laird made his first start in eight days for the Cardinals, who are 8-2 when he starts.

Craig hit his second homer and first since April 11 on a full count leading off the sixth to make it 3-1. St. Louis capitalized on second baseman Bill Hall’s fielding error to start the seventh with an RBI single by Ryan Theriot for a 4-1 cushion.

Happ said Laird hit his "worst pitch of the game." He was happy with the full-count pitch hammered by Craig.

"To be honest, I put the ball really where I wanted it," Happ said. "He was a difference-maker, that’s for sure."