England’s hopes of wrapping up the ODI series with a game to spare were dashed by a rejuvenated home side who won by 34 runs.
Set 239 to win the 2nd ODI in Dhaka, the tourists were up against it the moment they slipped to 26 for four.
Jos Buttler made a valiant 57 and the last pair of Adil Rashid and Jake Ball gave the hosts a few jitters during a 45-run stand but England were left to rue an early collapse.
James Vince was the first to go, caught at backward point off the impressive Mashrafe Mortaza, followed in the next over by Ben Duckett who was bowled attempting to drive a ball from Shakib Al Hasan which spun violently.
Jason Roy heaved across the line and was lbw to Mortaza and the same bowler found a way through the defence of Friday’s centurion Ben Stokes in his next over.
Jonny Bairstow and Buttler, in contrasting styles, gave England hope during a backs-against-the-wall partnership worth 79 runs.
Buttler, at times, looked to be batting on another wicket to the rest of his teammates, using his feet to both the quicks and spinners in making a fluent half-century which included seven crisp boundaries.
But the pair both fell to the enthusiastic Taskin Ahmed who also dismissed Chris Woakes as Bangladesh closed in on victory.
Moeen Ali and David Willey perished trying to up the ante against the spinners and the capacity crowd roared wildly when Mortaza brought an end to Ball's entertaining 28.
Earlier in the day England gave themselves a great chance of bowling Bangladesh out for a sub-200 score after Woakes and Ball combined to reduce the hosts to 39 for three.
Mahmudullah then played the game’s key innings, 75 from 88 deliveries, before he was bowled by Adil Rashid, one of two wickets for the leg spinner in quick succession.
England were in command at 169 for seven but tail-ender Mortaza blitzed three sixes in a rapid 44 to give his side the momentum - something they did not relinquish.
The third and final ODI is on Wednesday at Chittagong