Rollins and Utley advanced on a one-out wild pitch.
Schierholtz, pinch-hitting for Jonathan Papelbon (4-6), then stroked his game-winning hit through the hole at second base.
"I knew I had to put it in play. . . . I got a 3-2 curveball and put it in the right place," Shierholtz said.
The Phillies are now 67-71. It's the first time since June 26 that they have been within four games of .500.
They are 10-4 in their last 14 games, and while earning that second wild-card spot is still a long shot, at least they keep plugging away.
"There is a chance, and you never know what can happen," said starter Cliff Lee, who earned his 14th no-decision of the season.
Colorado scored twice in the first inning on an RBI double by Carlos Gonzalez and an RBI single by Wilin Rosario.
Lee has had trouble in the first inning this year. He has now allowed 12 earned runs in 25 opening innings for a 4.32 ERA.
After the first inning, he settled down.
"I definitely got away with mistakes early in the game, and as I got deeper in the game I got better," Lee said.
In the fifth, Colorado's Josh Rutledge just missed a home run to left field, settling for a one-out double. Lee stranded him by getting Gonzalez on a groundout to second and Rosario on a fly to right.
Meanwhile, the Phillies were struggling against Francis. In his previous six career starts against the Phillies, Francis was 1-1 with a 6.03 ERA.
Making his 200th major-league appearance, Francis got out of a jam in the third inning after Pierre singled and then stole second and third. Pierre now has 34 stolen bases in 40 attempts
Francis got out of the inning by striking out Ty Wigginton and getting John Mayberry Jr. on a pop-out to end the inning.
Rockies manager Jim Tracy has been careful in limiting the pitch count for his starters. Francis exited with two outs and Mayberry on second in the fifth inning. He had thrown 86 pitches.
Righthander Carlos Torres then retired Erik Kratz on a fly out to right.
Francis yielded six hits, walked one (which was intentional), and struck out seven.
Lee was lifted for Josh Lindblom in the seventh after Charlie Blackmon's single and Dexter Fowler's bunt single put runners on first and second with one out.
Lindblom struck out Rutledge and then departed for lefthander Jake Diekman, who battled back from a 3-0 count to get Gonzalez to ground out to second to end the inning.
Lee allowed just the two runs in 61/3 innings. He gave up eight hits, didn't walk a batter, and struck out seven, while throwing 104 pitches.
The Phillies tied the score on Laynce Nix's two-out, two-run double in the seventh inning.
"Cliff pitched a good game and we needed to bail him out," Nix said. "It feels good to come there and make a difference."
Contact Marc Narducci at 856-779-3225 or firstname.lastname@example.org, or follow on Twitter @sjnard.