"That made it even better," he said.
Trailing by 3-1 entering the ninth, Chase Utley, Ryan Howard, and Michael Young drew walks to open the inning against righthander Greg Holland.
When Domonic Brown and John Mayberry Jr. each struck out, Frandsen, who is now 6 for 13 in his career against the Royals, delivered the game-winner.
"Those guys grinded out at-bats to get walks against a tough pitcher," Frandsen said.
Both teams are now 2-3 this season.
The attendance was 39,475, ending a string of 313 games with crowds of 40,000 or more at Citizens Bank Park. The last home crowd of under 40,000 was April 29, 2009, in a 4-1 loss to the Washington Nationals.
Few would have forecast a pitcher's duel with a John Lannan-Luis Mendoza matchup. The two entered the game a combined 15 games under .500 for their careers.
A righthander, Mendoza limited the Phillies to two hits while striking out seven and walking three.
Lannan was making his Phillies debut, and he had a perfect game through three innings. The lefthander went seven innings, allowing five hits and three runs, all earned, while striking out five and walking none.
"I had butterflies but did my best to contain it," Lannan said.
Lannan's perfect game ended when Utley botched Alex Gordon's grounder to second base leading off the fourth inning.
His no-hitter was broken up with nobody out in the fifth inning when Jeff Francoeur drilled a double down the third-base line. Lorenzo Cain, who was hit by a pitch to open the inning, advanced to third base on the double and then scored the game's first run on Tejada's groundout to Utley at second.
Elliot Johnson knocked in the second run with a single up the middle past a drawn-in infield, scoring Francoeur.
The Phillies scored their first run in the bottom of the inning when Mayberry walked, advanced to second on Lannan's sacrifice bunt, and scored on Ben Revere's line-drive single that hit off the glove of a leaping Tejada at third base.
The Royals made it 3-1 in the seventh inning on consecutive doubles by Francoeur and Tejada. Francoeur is now hitting .536 lifetime against Lannan. Johnson then sacrificed Tejada to third for the first out. With Chris Getz pinch-hitting for Mendoza, Tejada was caught sleeping and was picked off third base by Quintero.
Aaron Crow and Kelvin Herrera pitched hitless innings in relief for the Royals, but the ninth inning was a different story.
"A win like this really gives you life," manager Charlie Manuel said. "It's a good feeling."
Contact Marc Narducci at firstname.lastname@example.org. Follow @sjnard on Twitter.