Sybase SQL Anywhere: откат транзакции с помощью CodeIgniter - PullRequest
0 голосов
/ 06 ноября 2018

Я использую CodeIgniter 2 с SQL Anywhere (у меня есть собственный класс для обработки соединения с SAP DLL).

У меня проблема с транзакцией, содержащей много запросов. Одним из них является ошибка (возвращаемая триггером при попытке обновить таблицу): в этом случае я хочу, чтобы транзакция была откатана в конце процедуры, как вы можете видеть ниже.

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...'); //This raises an error
$this->db->trans_complete(); //A rollback is done, and should cancel the first query

Я пытался изменить следующие параметры:

  • цепочка => Выкл.
  • continue_after_raiserror => Вкл.
  • on_tsql_error => Продолжить

Что странно, так это то, что я записываю свои запросы: выполнение их вручную в Interactive SQL работает хорошо! Похоже, что возникшая ошибка прерывает транзакцию.

Может ли кто-нибудь мне помочь?

Спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

Наконец, я нахожу решение: нам просто нужно использовать некоторые функции, предоставляемые DLL-библиотеками SAP PHP (http://dcx.sap.com/index.html#sa160/en/dbprogramming/php-support.html).

  • начать транзакцию с:

    sasql_set_option ($ this-> conn_id, 'auto_commit', 0);

  • наконец, если вам нужно совершить:

    sasql_commit ($ conn_id);

  • и если вам нужно выполнить откат:

    sasql_rollback ($ conn_id); sasql_set_option ($ conn_id, 'auto_commit', 1);

...