Не может откатывать транзакцию в Платформе Зенда

Нет, необходимо использовать DoEvents иначе, весь UI, клавиатура и события Timer останутся ожидающими в очереди.

единственная вещь, которую можно сделать, называет DoEvents однажды для каждых 1 000 повторений или такого.

11
задан Bill Karwin 1 August 2009 в 00:23
поделиться

3 ответа

Мы не можем исключить этот вопрос из списка «неотвеченных» вопросов на StackOverflow, если не будет хотя бы одного ответа с положительным голосом. Итак, я повторяю решение, которое вы обсуждали выше, в комментариях.

@nos предлагает:

Ваша БД случайно использует MySQL Таблицы MyISAM? Они не поддерживают транзакции. Вам нужно будет использовать InnoDB столы, если вы хотите транзакцию поддержка.

@Billy отвечает:

Да, я использую таблицы MyISAM. Я перешел на таблицы InnoDB, и это работает. Спасибо.

(Я пометил это как ответ сообщества, поэтому я не получаю от него никаких очков.)

19
ответ дан 3 December 2019 в 04:33
поделиться

Если бы моя таблица была InnoDB (видно из SHOW CREATE TABLE xxx ) и моя транзакция не откатывалась, что бы вы предложили?

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

Это часть модуля Тесты: у меня есть метод настройки, который запускает преобразование:

protected function setUp()
{
    global $db;

    $db->beginTransaction();

    // Insert this tested object into db.
}

, и метод удаления, который должен гарантировать, что строка не будет вставлена ​​в базу данных (каждый раз, когда тест запускается в этом тестовом классе, он выполняет setUp / tearDown, поэтому я не хочу, чтобы дубликаты заполняли мою таблицу db).

protected function tearDown()
{
    global $db;

    $db->rollBack();
}

Я проверил, какой SQL выполняется, и вижу, что autocommit имеет значение false при запуске транзакции и переключается на true после откатывается, но строка остается вставленной.

2
ответ дан 3 December 2019 в 04:33
поделиться

Ваш код в порядке.

Проверьте свой вариант стола. Вам нужно использовать Transacctional engine с InnoDb

0
ответ дан 3 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: