Match ends, Bristol City 1, Bournemouth 2.
Cameron Carter-Vickers moved Bournemouth back into the play-off places with a late winner at Bristol City.
Junior Stanislas swung a corner to the back post, where Philip Billing's header deflected off the back of team-mate Carter-Vickers into the net.
The hosts had led when Tyreeq Bakinson timed his leap to perfection to direct a header into the corner from Jack Hunt's cross.
However, City goalkeeper Daniel Bentley handed the Cherries an equaliser when he somehow palmed Stanislas' speculative long-range shot into his own net under no pressure.
The game looked to be fizzling out into stalemate, with neither side managing a second-half effort on target, until Billing's late header was unwittingly glanced in by Carter-Vickers.
It gave Nigel Pearson a first defeat of his fledgling tenure at City, who stayed 12th, while back-to-back wins lifted Jonathan Woodgate's side above Barnsley and Cardiff into sixth place.
Both sides went into the game buoyed by weekend wins over promotion-chasers, City winning at Swansea and Bournemouth shading Watford.
The Cherries, who face an FA charge after that ill-tempered win over the Hornets, carried the early threat, but the hosts responded well, forcing Asmir Begovic into a top double-save from Bakinson and Famara Diedhiou before Hunt teed up Bakinson for the opener.
Bentley made decent saves from Lloyd Kelly and Jefferson Lerma with the game goalless, and then denied the visitors an equaliser when he tipped over Arnaut Danjuma's powerful strike.
But the 27-year-old undid his good work with his howler on the stroke of half-time to extend the Robins' run of league matches without a clean sheet to 12.
Chances were scarce in a second half lacking in quality, but the Cherries finished the stronger, with substitute Shane Long inches from meeting Kelly's teasing ball across the six-yard box before Carter-Vickers' inadvertent winning moment.
Bristol City manager Nigel Pearson told BBC Radio Bristol:
"It's funny how people have their views coloured by just the result. In terms of endeavour, positive intent, work rate and commitment (it was) fantastic.
"The two goals we conceded are avoidable, and that's a disappointment, we have to learn from those sorts of mistakes.
"The first one's a vicious strike, but Dan was magnificent at the weekend and I don't have to tell him that it's something normally he would deal with.
"Tyreeq for the second goal just loses his man, but some of the defending they did today, they were absolutely magnificent."
Bournemouth head coach Jonathan Woodgate told BBC Radio Solent:
"I don't really care how they go in, Bournemouth have scored worldies now and again, but there is nothing wrong in getting a scrappy win. As long as we get the win I'm not bothered.
"We had that desire again today which was really good - I thought the two centre-halves were absolutely impeccable. They are building a really good relationship.
"The longest run of consecutive wins we have been on is three and that isn't good enough if we want to get in the play-offs or go automatic. We need to put wins together week in, week out, five or six on the spin."
- 2HuntSubstituted forLansburyat 50'minutes
- 43S Sessegnon
- 45PalmerSubstituted forSemenyoat 78'minutes
- 4NagySubstituted forMassengoat 89'minutes
- 15A Smith
- 3S Cook
- 5KellyBooked at 70mins
- 16L CookSubstituted forLongat 75'minutes
- 22PearsonSubstituted forBillingat 71'minutes
- 19StanislasSubstituted forStaceyat 89'minutes
- 10Danjuma GroeneveldSubstituted forRicoat 90'minutes
- Simon Hooper
- Shots on Target
Second Half ends, Bristol City 1, Bournemouth 2.
Dominic Solanke (Bournemouth).
Henri Lansbury (Bristol City) wins a free kick in the defensive half.
Corner, Bournemouth. Conceded by Antoine Semenyo.
Substitution, Bournemouth. Diego Rico replaces Arnaut Danjuma Groeneveld.
Substitution, Bournemouth. Jack Stacey replaces Junior Stanislas.
Substitution, Bristol City. Han-Noah Massengo replaces Ádám Nagy.
Goal! Bristol City 1, Bournemouth 2. Cameron Carter-Vickers (Bournemouth) with an attempt from very close range to the bottom right corner. Assisted by Philip Billing following a corner.
Attempt missed. Philip Billing (Bournemouth) header from very close range misses to the left. Assisted by Junior Stanislas with a cross following a corner.
Corner, Bournemouth. Conceded by Adrian Mariappa.
Foul by Philip Billing (Bournemouth).
Tyreeq Bakinson (Bristol City) wins a free kick in the defensive half.
Attempt missed. Dominic Solanke (Bournemouth) right footed shot from the centre of the box is high and wide to the right. Assisted by Junior Stanislas.
Foul by Lloyd Kelly (Bournemouth).
Famara Diédhiou (Bristol City) wins a free kick in the defensive half.
Lloyd Kelly (Bournemouth) wins a free kick on the left wing.
Foul by Antoine Semenyo (Bristol City).
Attempt blocked. Junior Stanislas (Bournemouth) left footed shot from the centre of the box is blocked. Assisted by Lloyd Kelly with a cross.
Substitution, Bristol City. Antoine Semenyo replaces Kasey Palmer.