MIAMI — It could have been worse, according to Scott Kingery, and when it came to the status of his right arm, his point was inarguable. Kingery was bruised and swollen, but not broken, by a 98 mph fastball, and the relief was visible on his face.

But dropping a second consecutive game to the bottom-feeding Miami Marlins was tougher to swallow for the Phillies here Tuesday night, especially when they considered how many opportunities they actually had to win.

The record will show that the Marlins won, 2-1, on a 10th-inning walk-off single up the middle by pinch-hitter Yadiel Rivera. It was the Phillies' fourth consecutive loss, their longest skid of the season and their sixth defeat in eight games since a four-game sweep of the Pittsburgh Pirates on April 19-22 at Citizens Bank Park.

But it would never have come to that if only the Phils hadn't left Carlos Santana standing on second base after his leadoff double in the ninth inning. Or if Maikel Franco had delivered with two outs and the bases loaded in the 10th rather than lining out to shortstop. Or if the Phillies hadn't gone 1-for-10 with runners in scoring position, the follow-up to their 1-for-6 performance in that situation Monday night.

"It's disappointing when we felt like we had plenty of run-scoring opportunities," manager Gabe Kapler said. "Did a good job in our at-bats and just came away with nothing. Hit some line drives with runners on base and hit it where guys were standing. That's certainly disappointing. We believe that the hits are going to fall, and right now, they're not."

Of course, it would be worse if Kingery had been seriously injured. Batting in the ninth inning, he was hit on the right biceps by a heater from Marlins reliever Tayron Guerrero. Kingery stayed in the game, but when his arm tightened up between the ninth and 10th innings, he was removed as a precaution.

The Phillies didn't see the need for an X-ray, though. And when Kingery emerged from the trainer's room into a nearly empty clubhouse late Tuesday night, he suggested there might even be a chance he could play in the series finale Wednesday night if the swelling subsides.

"It probably looks a lot worse than it was," Kingery said. "Thankfully, it missed pretty much all the important stuff. It just got pretty much fully bicep. It didn't feel good obviously, but it should be all right."

Spot-starting Zach Eflin looked sharp — perfect, actually, though five innings — in his first start since getting recalled from triple-A Lehigh Valley. In retiring the first 15 batters in a row before allowing a bloop double by Miguel Rojas to open the sixth inning, Eflin gave up little in the way of solid contact, keeping the Marlins off balance with mostly a mixture of fastballs and sliders. He pounded the strike zone and got ahead in the count often enough that he forced the young Marlins to swing the bat.

The Phillies have seen this sort of thing from Eflin before. As a rookie in 2016, he tossed two complete games, including a three-hit shutout of the Pittsburgh Pirates. Last season, he had a 2.81 ERA through five starts before getting knocked around in his next three and straining his right shoulder.

But if Eflin is able to string together a few quality starts in place of Lively, it would help stabilize the back of the rotation until Jerad Eickhoff returns from the disabled list, likely later this month.

Eflin had one regret. He was unable to drop down a sacrifice bunt in the third inning, and the Phillies wound up leaving two runners on base.

"It really sucks when you don't bunt [Jorge Alfaro] over and then Cesar [Hernandez] gets a base hit," Eflin said. "The 10th inning could've been avoided. We could've won the game. So that's on me for not doing my job and getting Jorgie over."

In that sense, Eflin fit right in with the rest of the offense.