Я пробую это: public function destroy($id) { DB::beginTransaction(); try { $product = $this->product_repository->find($id); $result = $product->categories()->detach(); if($result) { list($status,$instance) = $this->product_repository->delete($id); } DB::commit(); return ['status'=>true,'data'=>$status]; } catch (\Exception $e) { DB::rollback(); return ['status'=>false, 'message'=>$e->getMessage()]; } } Если код выполнен, $this->product_repository->delete($id) не работает / не удаляется. Но это: $product->categories()->detach(); , он работает / удаляется. Как, если […]
У меня есть много запросов на выбор вставки, я написал запрос транзакции, но хочу знать, нужно ли его исправлять или исправлять. Также, если все в порядке, я получаю успешное завершение транзакции! » , но если что-то не так, то сообщение об ошибке скоро, поэтому путайте его работу или нет. Будут ли $result_a и $result_b , […]
Это исходный код, мне нужно определить идентификатор (см. Отмеченную позицию между двумя запросами ниже). $connection = Yii::app()->db; $transaction=$connection->beginTransaction(); try { $q = "INSERT INTO `someTable1` …. "; $connection->createCommand($q)->execute(); // Single Row Inserted // HERE!! How to get the last insert ID from query above $q = "INSERT INTO `someTable2` …. WHERE id = LAST_INSERT_ID_FROM_FIRST_QUERY "; […]
Мне просто интересно, как лучше обрабатывать транзакции через несколько уровней обслуживания. Уровни службы используют ORM для хранения и извлечения из базы данных. Должны ли транзакции быть известны и обрабатываться в пределах отдельных слоев обслуживания? Или они должны обрабатываться другим слоем? Например: у меня есть два уровня обслуживания для пользователей и клиентов. Я бы хотел: 1) […]
Классические транзакции в цикле: $mysqli->query("START TRANSACTION"); foreach ($pdata as $key => $value) { $sql = "INSERT INTO temp (`fund_id`) VALUES (" . $value . ")"; $result = $mysqli->query($sql); } $mysqli->query("COMMIT"); Затем мы переходим к подготовленным заявлениям: $mysqli->autocommit(FALSE); foreach ($pdata as $key => $value) { $sql = "INSERT INTO temp (`fund_id`) VALUES (?)"; $stmt = $mysqli->prepare($sql); […]
У меня есть вопрос … Например: пользователь купит что-то за свой доллар Проверьте его баланс в долларах США Вычитайте USD из своего счета Сделать заказ -> очередь заказов пользователь получает свой предмет, а другой получает свой доллар Допустим, что пользователи делают 5 запросов за одну секунду (очень быстро). Таким образом, возможно (и произойдет), что запущено […]
Насколько я понял, транзакция начинается, когда мы вызываем $mysqli->autocommit(FALSE); и заканчивается после вызова $mysqli->commit(); как в приведенном ниже примере. <?php //Start transaction $mysqli->autocommit(FALSE); $mysqli->query('UPDATE `table` SET `col`=2'); $mysqli->query('UPDATE `table1` SET `col1`=3;'); $mysqli->commit(); //End transaction //Executing other queries without transaction control $mysqli->query("Select * from table1"); $mysqli->query("Update table1 set col1=2"); //End of executing other queries without transaction […]
Я использую Zend_Db для вставки некоторых данных внутри транзакции. Моя функция запускает транзакцию, а затем вызывает другой метод, который также пытается запустить транзакцию и, конечно, не работает (я использую MySQL5). Итак, возникает вопрос: как определить, что транзакция уже запущена? Вот пример кода: try { Zend_Registry::get('database')->beginTransaction(); $totals = self::calculateTotals($Cart); $PaymentInstrument = new PaymentInstrument; $PaymentInstrument->create(); $PaymentInstrument->validate(); $PaymentInstrument->save(); […]
Я использую транзакции Codeigniter $this->db->trans_start(); $this->db->query('AN SQL QUERY…'); $this->db->trans_complete(); Это прекрасно работает, проблема заключается в том, что внутри trans_start и trans_complete я trans_complete другие функции, и эти функции работают с базой данных, поэтому они содержат вставки и обновление, а некоторые удаляются … ex: $this->db->trans_start(); $this->utils->insert_function($data); $this->utils->update_function2($test); $this->db->trans_complete(); Теперь, если эти функции выполняются и возникают некоторые […]
Мы используем DB::transaction() для нескольких запросов на вставку. При этом следует ли try…catch его внутри или обернуть? Нужно ли вообще включать try…catch когда транзакция автоматически провалится, если что-то пойдет не так? Попробуйте try…catch транзакцию: // try…catch try { // Transaction $exception = DB::transaction(function() { // Do your SQL here }); if(is_null($exception)) { return true; } […]