Неожиданная фиксация транзакции MySQL - PullRequest
2 голосов
/ 25 апреля 2011

У меня есть PHP-скрипт, который работает как с базой данных MySQL, так и с подключением ODBC DB (QODBC в QuickBooks). Установка выглядит так:

Retrieve rows from MySQL database
Begin MySQL transaction:
    Loop through rows
    Process data
    MySQL Insert/Update
    MySQL Update
    QODBC Selects/Inserts
End Loop
    MySQL Delete
Commit Transaction

Проблема в том, что в случае ошибки в разделе QODBC команды MySQL до этого момента будут зафиксированы. Это приводит к дублированию и неправильным данным в MySQL. Нет вложенных транзакций, и все запросы успешно / неудачно обрабатываются (т.е. нет фатальных ошибок или преждевременного выхода из скрипта).

Вопрос в том - есть ли проблема при подключении к двум разным базам данных через PHP, в одном и том же скрипте? Кажется, что происходит, когда скрипт попадает в раздел ODBC, транзакция MySQL закрывается и автоматически фиксируется.

1 Ответ

3 голосов
/ 25 апреля 2011

Я бы сказал, что есть две возможные причины:

  • Ваши таблицы были созданы с использованием MyISAM, который не поддерживает транзакции
  • Ваше соединение настроено на автокоммит
...