Chicago Mark McGwire's power is still there.
McGwire hit two home runs as St. Louis beat Chicago, 3-1, Thursday.
McGwire has 570 home runs, three behind Harmon Killebrew for fifth place on the career list. He has homered in three straight games, and has nine in his last 15 games since the All-Star break.
While McGwire's batting average is still only .205, each of his last six hits have been home runs.
"It was an opportune time for Big Mac to discover that home-run stroke," Cardinals manager Tony La Russa said.
McGwire has pushed forward despite injuries, including a trip to the DL that saw him miss 36 games.
"I probably won't be comfortable until next year, so I am just battling through it," McGwire said.
Rookie Bud Smith (3-0) allowed a run on five hits and three walks in seven innings. The 21-year-old left-hander struck out five, a season-high.
Steve Kline recorded three outs for his fourth save.
The Cardinals, who stopped the Cubs' three-game winning streak, have won eight of 12 and got within 71/2 games of first-place Chicago in the NL Central.
Albert Pujols hit a go-ahead double for the Cardinals in the sixth, but the hustle of Fernando Vina set up the score.
With one out, Vina lined the ball near the right-field line and tested the arm of Sammy Sosa, who threw a strike to Ricky Gutierrez at second in plenty of time to get Vina. But the force of Vina's slide knocked the ball out. Gutierrez was given an error.
"Ball came out," Gutierrez said. "I don't know."
After a groundout moved Vina to third, Pujols doubled to the gap in right-center, putting the Cardinals ahead 2-1.
"We might have been pushing it a little," La Russa said of Vina's aggressiveness. "Sammy made a great throw and the slide knocked the ball loose."
Smith retired 16 of 19 batters at one point.
Giants 11, Diamondbacks 3
Phoenix Barry Bonds homered to pass Mickey Mantle on baseball's career list, then slammed his way back into the chase for Mark McGwire's single-season home run record. Bonds moved ahead of Mantle and McGwire's record pace with his 43rd and 44th homers the second one a grand slam as San Francisco beat Curt Schilling and Arizona.
Bonds passed Mantle into ninth place on the career homer list with 538. The pair were tied at 536 homers going into the game.
The Giants left fielder had gone without a homer and had only two hits in his previous 19 at bats before he lined a solo shot over the right-field fence in the fourth inning. Bonds followed with his ninth career slam, but first since April 26, 1998, to left in the fifth.
Both homers came on the first pitch from Schilling (14-5), who also surrendered a home run to Rich Aurilia and leads the majors in homers allowed with 29.
Schilling allowed six runs on eight hits in five innings. He struck out four and walked two. He had thrown 14 scoreless innings in a row before Aurilia and Bonds homered on consecutive pitches to put San Francisco up 2-1 in the fourth.
Astros 3, Pirates 2
Pittsburgh Craig Biggio hit a tiebreaking single in the eighth inning to help Houston beat Pittsburgh. Dave Mlicki (2-0) ended his four-game losing streak against the Pirates. The winless drought covered nine starts and four years. Jason Schmidt (6-6) fell to 0-9 lifetime against the Astros.
Vinny Castilla drew a leadoff walk in the Astros' eighth and moved up on a sacrifice. Pinch hitter Orlando Merced then singled, but Castilla was thrown out at the plate when catcher Jason Kendall jumped for Tike Redman's high throw and came down to block the plate.
Merced moved to second on the throw home, and scored on Biggio's hit. Mlicki, who came from Detroit in a June 23 trade for Jose Lima, allowed five hits and two runs in seven innings. He hadn't beaten the Pirates since June 21, 1997, when he was with the New York Mets.
Phillies 3, Mets 2
New York Marlon Anderson singled to start a two-run rally in the eighth inning, then was carried off the field after an awkward fall in the ninth as Philadelphia beat New York. Jimmy Rollins hit a two-out, tiebreaking RBI single off Rey Ordonez's glove to lead the Phillies to their third straight win. The Phillies started their 10-game roadtrip by rallying for two runs in the eighth inning. They won for just the fourth time in 43 games when trailing after seven innings.
Dodgers 3, Rockies 1
Los Angeles Eric Gagne allowed three hits in 61/3 innings and was bailed out of a bases-loaded jam by Giovanni Carrara as Los Angeles beat Colorado. The win was the 11th in 13 games and 21st in 28 for the surging Dodgers, while the Rockies lost for the 27th time in 34 games.
Gagne (4-4) faced just one batter over the minimum in the first six innings, and held a 3-0 lead entering the seventh.
Expos 3, Braves 2, 10 innings
Montreal Mike Mordecai fouled off four straight full-count pitches before drawing a bases-loaded walk in the 10th inning to give Montreal a victory over Atlanta.
The Braves lost for just the fifth time in 24 road games to fall into a tie for the NL East lead with Philadelphia, which won 3-2 in New York.