Wenn meine Tabelle InnoDB war, (von SHOW TABLE xxx
CREATE gesehen) und meine Transaktion Rollt nicht zurück, was würdest du vorschlagen?
CREATE TABLE `EarningCode` (
`ID` int(11) NOT NULL auto_increment,
`EarningCode` varchar(16) collate utf8_unicode_ci NOT NULL,
`Description` varchar(255) collate utf8_unicode_ci NOT NULL,
`DateEffective` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`Rate` float NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1239 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Es ist ein Teil von Unit-Tests: Ich habe eine Set-up-Methode, die eine transation beginnt:
protected function setUp()
{
global $db;
$db->beginTransaction();
// Insert this tested object into db.
}
und eine Träne down-Verfahren, die sicherstellen sollen, dass die Zeile nicht in die db eingefügt wird (jeweils Wenn ein Test in dieser Testklasse ausgeführt wird, führt er das Paar setUp/tearDown aus, und deshalb möchte ich keine Duplikate, die meine db-Tabelle füllen).
protected function tearDown()
{
global $db;
$db->rollBack();
}
Ich habe überprüft, welche SQL ausgeführt wird, und ich kann das autocommit sehen auf false gesetzt ist, wenn die Transaktion gestartet wird, und schaltet auf true nach dem Walzen zurück, aber die Zeile eingefügt bleibt.
Ist Ihr DB auf jeden Fall MySQL mit MyISAM-Tabellen? Sie unterstützen keine Transaktionen. Sie müssen InnoDB-Tabellen verwenden, wenn Sie Transaktionsunterstützung wünschen. – nos
Ja, ich verwende MyISAM-Tabellen. Ich habe zu InnoDB-Tabellen gewechselt und es funktioniert. Vielen Dank. – Billy