
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.89.50] |
![]() |
|
Сообщ.
#1
,
|
|
|
День добрый!
Вопрос, собственно, состоит в том как правильно обработать такую ситуацию. 1) имеется 2 таблицы (мастер-детайл,но не в этом суть) 2) при вставке пытаюсь использовать такой код ![]() ![]() try { $this->DataBase1->BeginTrans(); ---- $this->DataBase1->execute(" Insert into master..."); // тут вставка в таблицу мастер --- $this->DataBase1->execute(" Insert into detail..."); // тут вставка в таблицу детайл $this->DataBase1->CompleteTrans(); } catch(Exception $e) { $this->DataBase1->CompleteTrans(false); } Так вот,если ошибка происходит при вставке в мастер-то все нормально,а вот если на этапе вставки во вторую таблицу-то в мастер запись все равно вставляется,а не должна. Что-то я делаю не так? |
![]() |
Сообщ.
#2
,
|
|
При ошибке надо откатывать транзакцию. Не вижу в приведенном коде RollbackTrans.
|
Сообщ.
#3
,
|
|
|
Это $this->DataBase1->CompleteTrans(false);
|
Сообщ.
#5
,
|
|
|
Поставил вместо методов BeginTrans,CompleteTrans
![]() ![]() try { $this->Database1->execute("START TRANSACTION;"); . . $this->Database1->execute("COMMIT;"); } catch (Exception $e) { $this->Database1->execute("ROLLBACK;"); } Заработало как надо. Выходит,проблема в компоненте DataBase? |
![]() |
Сообщ.
#6
,
|
|
Цитата Alex2011 @ Выходит,проблема в компоненте DataBase? скорее в провайдере. так как DataBase абстрактно работает с базой через провайдер (ибо в каждой базе свои приколы и особенности). |
Сообщ.
#7
,
|
|
|
Спасибо за наводку, однако непонятно-есть ли такие методы в компоненте DataBase, во всяком случае, в описании классов не нашел. Надо проверять. А еще такой момент-ADO в HTML5Buildere как таковой компонент отсутствует, даже папки нет соответствующей. А вот проверку результата по execute, наверно, можно применить. Тоже надо посмотреть будет ли хоть какой-нибудь результат в случае ошибки. Цитата ViktorXP @ скорее в провайдере. так как DataBase абстрактно работает с базой через провайдер (ибо в каждой базе свои приколы и особенности). Да,наверно. |