Sheffield Wednesday fell to a seventh straight defeat to pile more pressure on manager Dave Jones.
Wednesday had made the perfect start at Hillsborough with Miguel Llera opening the scoring after just three minutes.
Llera then gave away the 18th-minute penalty for Sam Baldock to level before Gary Madine put the hosts back in front with 11 minutes to go.
But a second Baldock spot kick followed by an Albert Adomah winner with minutes remaining gave The Robins the points.
Wednesday's woeful run
Wednesday 2-3 Bristol City
Cardiff 1-0 Wednesday
Wednesday 1-4 Watford
Wednesday 0-2 Leicester
Nott'm Forest 1-0 Wednesday
Middlesbrough 3-1 Wednesday
Wednesday 0-2 Blackpool
A final controversy - Madine shooting home but the referee blowing for a foul - simply added to Jones's frustrations.
Wednesday started the fixture brightly, despite their recent fun of poor form, and were ahead inside three minutes.
Chris Lines curled an inviting corner into the six-yard box for Llera to meet the ball with an unstoppable header.
The hosts should have added to their total but squandered chances and Bristol City grabbed an equaliser against the run of play.
Baldock received the ball into his feet in the penalty area, turned Llera and the centre-half brought him down. Referee Andre Mariner pointed to the spot and Baldock calmly sent keeper Chris Kirkland the wrong way.
In the second half both sides - each battling to fight their way clear of the relegation zone - strove for the win, but it was Wednesday who struck first.
Jermaine Johnson broke at pace, his shot was palmed out and Madine slotted home the rebound from eight yards.
The Owls had just over 10 minutes to hold on, but defensive frailties were all too evident and did not go unpunished.
First Llera handled in the area and Baldock converted, then Adomah curled in a superb effort from a free-kick to pour the misery on Wednesday and Jones.
Sheffield Wednesday manager Dave Jones on the incident surrounding Madine's disallowed goal:
"There are things that go against you, I have seen the referee and he says that Llera has pushed him. If he has pushed him, that's the stupidity of it.
"He says he didn't so, if he didn't then the referee has made a decision I have never seen before in football. It was a clear-cut penalty [before Madine's shot for the disallowed goal], but he didn't see it.
"Today was a prime example of, 'When your luck is out, it's out', which is silly because for 84 minutes our luck was in, but it's cost us."
Bristol City manager Derek McInnes talking about the same incident:
"I think the ref has a decision to make on the handball. But he gives a free-kick prior to the ball going in the net, my players have said they heard a whistle before the ball went into the net.
"For me the only thing I have seen is the over-reaction of the centre-back grabbing the referee with both hands, it was over-aggressive. You can't manhandle the referee, he is quite within his rights to give a free-kick, that's a fact.
"Whether Sheffield Wednesday might have had a penalty before that is another matter, but before the shot came in the referee's whistle had clearly gone. The complaint they should have is whether it was a penalty or not, it could have gone either way."
Free kick awarded for a foul by Lewis Buxton on Liam Fontaine. Tom Heaton takes the direct free kick.
90:00 +2:06 Booking
Booking Miguel Llera receives a yellow card for unsporting behaviour.
Inswinging corner taken by Chris Lines, Header from deep inside the area by David Prutton goes harmlessly over the crossbar.
90:00 +0:08 Substitution
Substitution Stephen Pearson comes on in place of Sam Baldock.
Booking Booking for Sam Baldock for time wasting.
87:43 Full time
Full Time The game is over, as the referee blows his whistle.
87:30 Goal scored
Goal - Albert Adomah - Sheff Wed 2 - 3 Bristol C Albert Adomah scores a goal direct from the free kick from just outside the box to the top left corner of the goal. Sheff Wed 2-3 Bristol City.
Booking Booking for Martin Taylor for unsporting behaviour.
Neil Danns fouled by Martin Taylor, the ref awards a free kick.
85:43 Goal scored
Goal - Sam Baldock - Sheff Wed 2 - 2 Bristol C Sam Baldock scores a power penalty. Sheff Wed 2-2 Bristol City.
Neil Danns restarts play with the free kick. Gary Madine is penalised for a handball.
Booking David Prutton booked for unsporting behaviour.
Free kick awarded for a foul by Lozano Rodri on Matthew Bates.
Substitution Joe Bryan goes off and Paul Anderson comes on.
Joe Bryan gives away a free kick for an unfair challenge on Lewis Buxton. Chris Lines delivers the ball from the free kick right-footed from right by-line.
Substitution Danny Mayor replaces Jermaine Johnson.
Substitution Lozano Rodri replaces Chris O'Grady.
The assist for the goal came from Jermaine Johnson.
78:33 Goal scored
Goal - Gary Madine - Sheff Wed 2 - 1 Bristol C A goal is scored by Gary Madine from inside the penalty area low into the middle of the goal. Sheff Wed 2-1 Bristol City.
Corner taken by Albert Adomah, clearance by Martin Taylor.
Albert Adomah takes a shot. Blocked by Miguel Llera.
Outswinging corner taken by Joe Bryan, Jeremy Helan manages to make a clearance.
The ball is sent over by Joe Bryan, Jeremy Helan makes a clearance.
Miguel Llera gives away a free kick for an unfair challenge on Ryan Taylor. Sam Baldock restarts play with the free kick. Liam Fontaine takes a shot. Brilliant save by Chris Kirkland. Outswinging corner taken right-footed by Sam Baldock from the right by-line.
Michail Antonio has an effort at goal from outside the box which goes wide right of the goal.
Lewis Buxton sends in a cross.
A cross is delivered by Lewis Buxton.
Joe Bryan crosses the ball, comfortable save by Chris Kirkland.
Outswinging corner taken by Joe Bryan.
Jeremy Helan gives away a free kick for an unfair challenge on Albert Adomah. Richard Foster restarts play with the free kick.
Lewis Buxton crosses the ball, Miguel Llera produces a header from inside the area that goes over the crossbar.
Foul by Ryan Taylor on Gary Madine, free kick awarded. Gary Madine restarts play with the free kick.
Lewis Buxton produces a cross.
Jermaine Johnson sends in a cross.
Lewis Buxton delivers the ball.
Gary Madine takes a shot. Stephen McManus gets a block in.
Effort on goal by Jermaine Johnson from just outside the area goes harmlessly over the target.
Corner from right by-line taken by Chris Lines.
Jermaine Johnson has an effort at goal from outside the box which goes wide left of the target.
Gary Madine takes a shot. Tom Heaton makes a save.
Albert Adomah takes a shot. Save by Chris Kirkland.
Corner taken right-footed by Albert Adomah.
David Prutton takes a shot. Blocked by Matthew Bates.
The ball is delivered by Richard Foster, Martin Taylor manages to make a clearance.
Michail Antonio is penalised for a handball. Tom Heaton takes the direct free kick.
Corner taken by Chris Lines.
Jermaine Johnson crosses the ball, Ryan Taylor makes a clearance.
Outswinging corner taken right-footed by Neil Danns played to the near post, Header from close range by Sam Baldock misses to the right of the target.
Albert Adomah takes a shot. Jeremy Helan gets a block in.
Outswinging corner taken by Marvin Elliott from the left by-line.
The ball is swung over by Joe Bryan, David Prutton makes a clearance.
The referee starts the second half.
45:00 +1:13 Half time
Half Time The referee blows for half time.
Michail Antonio has an effort at goal from deep inside the area missing to the right of the goal.
Corner taken by Chris Lines.
The ball is sent over by Liam Fontaine.
Chris Lines has an effort at goal from just outside the box which goes wide of the left-hand post.
Outswinging corner taken from the right by-line by Chris Lines, Ryan Taylor manages to make a clearance.
Outswinging corner taken by Joe Bryan from the left by-line.
The assistant referee signals for offside against Michail Antonio. Tom Heaton takes the indirect free kick.
Effort from outside the penalty box by Chris Lines goes wide right of the target.
Outswinging corner taken right-footed by Albert Adomah from the right by-line, Unfair challenge on Chris O'Grady by Marvin Elliott results in a free kick. Chris Kirkland takes the direct free kick.
David Prutton concedes a free kick for a foul on Sam Baldock. Albert Adomah has a direct shot on goal from the free kick, Gary Madine gets a block in.
Chris O'Grady gives away a free kick for an unfair challenge on Liam Fontaine. Free kick taken by Joe Bryan.
Jermaine Johnson concedes a free kick for a foul on Joe Bryan. Liam Fontaine restarts play with the free kick.
Marvin Elliott challenges Michail Antonio unfairly and gives away a free kick. Direct free kick taken by Chris Lines.
Free kick awarded for an unfair challenge on Gary Madine by Matthew Bates. Chris Lines restarts play with the free kick.
17:13 Goal scored
Goal - Sam Baldock - Sheff Wed 1 - 1 Bristol C Placed penalty scored by Sam Baldock. Sheff Wed 1-1 Bristol City.
Miguel Llera gives away a Penalty for an unfair challenge on Sam Baldock.
Marvin Elliott takes a shot. Blocked by Chris Lines.
Unfair challenge on Marvin Elliott by David Prutton results in a free kick. Richard Foster takes the direct free kick.
Free kick awarded for a foul by Neil Danns on Chris Lines. Chris Kirkland takes the free kick.
A cross is delivered by Jermaine Johnson, Chris O'Grady produces a left-footed shot from inside the area that goes over the bar.
Gary Madine takes a shot. Comfortable save by Tom Heaton.
Foul by David Prutton on Marvin Elliott, free kick awarded. Tom Heaton takes the direct free kick.
Albert Adomah produces a cross, Chris Kirkland makes a comfortable save.
Stephen McManus concedes a free kick for a foul on Chris O'Grady. Shot comes in from Miguel Llera from the free kick, save by Tom Heaton.
Chris Lines provided the assist for the goal.
2:59 Goal scored
Goal - Miguel Llera - Sheff Wed 1 - 0 Bristol C Miguel Llera scores a headed goal from close range. Sheff Wed 1-0 Bristol City.
Corner taken by Chris Lines,
The ball is delivered by David Prutton, Tom Heaton makes a save.
Ryan Taylor challenges Miguel Llera unfairly and gives away a free kick. Lewis Buxton takes the free kick.
Foul by David Prutton on Neil Danns, free kick awarded. Tom Heaton takes the direct free kick.
The referee gets the match started.
Live text and data provided by The Press Association
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.