Updated

With a few waves of his magic wand, Carlos Villanueva earned the win against the Detroit Tigers.

Villanueva won his fourth straight start, Travis Snider hit a two-run home run and the Toronto Blue Jays beat Detroit 8-3 on Friday night.

It wasn't easy for Villanueva, who gave up two solo homers in the first inning and needed a double play to get out of a jam in the third. But by surviving long enough to win, Villanueva got some praise from bench coach Don Wakamatsu.

"Wakamatsu said it best: 'It felt like a magician out there today, pulling all the tricks out,'" Villanueva said. "I know some starts are going to be that way, probably more than I want to during the course of a season, but it worked."

Jeff Mathis drove in three runs with a bases-loaded double and Omar Vizquel had two hits as Toronto won for the fifth time in seven games.

"Carlos pitched a great game, everybody contributed," Vizquel said. "Mathis got the big shot that got everybody home and we got something going there. The rest was up to the bullpen, who did a great job."

Villanueva (6-0) saw both Cabrera and Fielder take him deep over a three-pitch span in the first inning, but didn't give up another run after that. Unbeaten in five starts since joining Toronto's rotation after 22 relief appearances, the right-hander allowed four hits in five innings, walked two and struck out three.

"We felt like we had a shot at him, we just didn't do anything," Tigers manager Jim Leyland said.

Even if he needs some magic from time to time, Blue Jays manager John Farrell said Villanueva has done a good job of keeping the Blue Jays close in all of his outings as a starter, never allowing more than three runs.

"What he has shown repeatedly is that he is going to keep the game under control," Farrell said. "He sets the tone, he throws strikes and is capable of making the key pitch in tough situations."

Detroit's Quintin Berry credited Villanueva for mixing well after the shaky first.

"Everybody knows he's got many pitches he can throw and he was throwing them all," Berry said. "We were doing a good job of trying to wait him out but he's got good stuff."

Aaron Loup worked 1 1-3 innings, Brandon Lyon got two outs, Darren Oliver gave up Fielder's RBI single in the eighth and Casey Janssen finished.

Miguel Cabrera and Prince Fielder hit back-to-back homers for Detroit but the Tigers lost for the third time in four games.

"We haven't swung the bats good the last few days," Leyland said. "We didn't swing the bats good in Cleveland and we didn't swing the bats good again here tonight."

Cabrera's homer was his 25th, and raised his major league-leading RBI total to 83. For Fielder, the homer was his 16th.

Detroit has won nine of 14 since the All-Star break but is just 3-4 away from home in that time.

Rick Porcello (7-6) failed to extend his road winning streak to four games, allowing five runs and six hits in six innings. Porcello, who won a career-best four straight road games as a rookie in 2009, walked two and struck out one in his first road defeat since June 8 at Cincinnati.

Toronto cut Detroit's early lead in half with a run in the bottom of the first. Vizquel doubled, his first extra-base hit of the season, and scored on Edwin Encarnacion's two-out single.

The Blue Jays took the lead with a four-run fourth, loading the bases with a single and two walks before Mathis hit a two-out double just beyond the reach of Berry in left, scoring all three runners.

"He was one pitch away from getting out of that inning and he hung a slider to Mathis that cleared the bases," Leyland said.

Anthony Gose followed with a bad-hop single that eluded Fielder, giving the rookie outfielder his first career RBI.

After Yan Gomes reached on a throwing error by second baseman Omar Infante in the eighth, Snider followed with a blast to right-center, his third in five games.

NOTES: Vizquel matched Pete Rose as the second oldest players to hit a triple at 45 years, 94 days. Julio Franco (46 years, 309 days) is the oldest. ... The speedy Gose followed his first RBI with his first career stolen base. ... Blue Jays SS Yunel Escobar and DH Adam Lind were scratched with back soreness. Vizquel made his third straight start in Escobar's place, while Encarnacion moved to DH and Gomes took over at 1B. ... Toronto RHP Drew Hutchison (elbow) played catch Friday for the first time since injuring his arm six weeks ago, making about 30 throws from 45 feet. ... Blue Jays RHP Brandon Morrow (left oblique) threw a bullpen session Friday and remains on track to make his first minor league rehab start Sunday, a two-inning stint at Class-A Dunedin. ... Detroit's last visit to Toronto was in May, 2011, a series that saw Justin Verlander throw his second career no-hitter. ... RHP Anibal Sanchez, acquired from Miami this week, makes his Tigers debut Saturday afternoon against Blue Jays RHP Henderson Alvarez.