Förberedda uttalanden och transaktioner är orelaterade tekniker och teknologier.
Du kanske vill utfärda START TRANSACTION
och COMMIT
/ROLLBACK
kommandon direkt istället för att använda de dedikerade metoderna. De är funktionellt likvärdiga.
För din loop skulle du utfärda START TRANSACTION
före din prepare
, sedan din COMMIT
efter att slingan går ut. Du bör förmodligen inte försöka öppna en transaktion efter att ett förberett uttalande har startat men innan det har utförts.
Av någon anledning lade de inte till ett "start transaktion"-kommando till förmån för att stänga av autocommit. Det är en av de där konstiga sakerna med mysqli som gör att jag alltid rekommenderar PDO istället. :) Att öppna en transaktion stänger implicit av autocommit under transaktionens varaktighet.