sql транзакции рекурсия

maxim

Новичок
sql транзакции рекурсия

Введение в задачу:
есть система расчета з/п для MLM где на поступившую от покупателя сумму начисляется зарплата по всей структуре консультантов вверх.
Для рассчета з.п. я рекурсивно вызываю метод salary2all класса finance

Задача: при разборе поступившего платежа начинаю транзакцию и если где то есть сбой (или исключить возможность при параллельном разбросе суммы по консультантам один из них перейдет на более высокий тариф з/п) то оборвать транзакцию.

Вопрос: в классе БД при инициализации класса у меня есть метод подключения и он возвращает ид подключения $this->lid = mysql_pconnect(DB_HOST,DB_USER,DB_PWD);
Должен ли я для того чтобы не обрывалась транзакция передавать в рекурсивном методе в качестве параметра $this->lid?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ты путаешь теплое с мягким
1. рекурсия в твоей задаче совсем необязательна
2. к БД и классу это не имеет отношения
3. подключение и транзакция - это тоже разные понятия, они почти не связаны
 

maxim

Новичок
Прошу прощения что не описал в первом посте

1. при построении дерева (и расчете з/п на структуру) удобно использовать рекурсию
2. при каждом рекурсивном вызове метода salary2all в нем инициализируется класс dbAccess с методом подключения к БД $this->lid = mysql_pconnect(DB_HOST,DB_USER,DB_PWD);
3. Я зная что они не связаны. Насколько я понимаю транзакция действует только в рамках одного подключения. и если при запуске транзакции, я в скрипте подключусь еще раз к бд $this->lid = mysql_pconnect(DB_HOST,DB_USER,DB_PWD); и в рамках этого второго подключения буду слать sql запросы, то они к транзакции никакого отношения уже иметь не будут.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
2 вопроса
- у тебя таблица myisam или innodb?
- почему бы не выбирать все данные, считать все в скрипте, а в базу писать уже результаты рассчетов?
 

maxim

Новичок
Спасибо grigori

-innodb
-может быть, тоже думал об этом, но не совсем удобно придется изголяться с ветвлениями и проходить расчет несколько раз, так как часть начисляемой суммы может идти по одному тарифу, а другая уже по более высокому (человек перешел на другой уровень) и всё это влияет на структуру выше.

Но все же в познавательных целях как решить вопрос в поставленной задаче
 

Alexandre

PHPПенсионер
mysql_pconnect(DB_HOST,DB_USER,DB_PWD);
в твоей задачи опасно использовать pconnect() - это может привести к тому, что при рекурсивных вызовах вскоре могут закончатся все коннекции...
 

maxim

Новичок
Спасибо Alexandre, я уже изменил на connect. Так даже лучше не надо передавать ид подключения из функции в функцию. Перечитал азы введения в MySQL.
 
Сверху