Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Transaction (nie działają?)
jakal
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.01.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Jest jakakolwiek możliwość, zby wykonało się 1 zapytanie, a drugie nie? (zakładając, że dane w zmiennych są poprawne)

  1. mysql_query('BEGIN', $linkCron1);
  2. // Dodaj nową platnosc
  3. $query2 = "INSERT INTO transaction_pay (transaction_pay.pay_trans_id, transaction_pay.pay_trans_it_id, transaction_pay.pay_trans_count) VALUES ('".$as_result[$a]->{'deal-transaction-id'}."', '".$as_result[$a]->{'deal-item-id'}."', '".$as_result[$a]->{'deal-quantity'}."')";
  4. if (!mysql_query($query2, $linkCron1)){
  5. mysql_query('ROLLBACK', $linkCron1);
  6. }
  7. else {
  8. // Dodaj informacje o opłaconych towarach
  9. $query2 = "UPDATE transactions SET transactions.pay_quantity=transactions.pay_quantity+".$as_result[$a]->{'deal-quantity'}.", transactions.data_platnosci='".date("Y-m-d H:i:s",$as_result[$a]->{'deal-event-time'})."', transactions.data_przyjeciaplatnosci='".date("Y-m-d H:i:s", $data_teraz)."', transactions.error='0' WHERE transactions.transaction_user_id='".$as_result[$a]->{'deal-buyer-id'}."' AND transactions.allegro_id='".$as_result[$a]->{'deal-item-id'}."' AND transactions.pay_quantity<transactions.buy_quantity";
  10. if (!mysql_query($query2, $linkCron1)){
  11. mysql_query('ROLLBACK', $linkCron1);
  12. }
  13. else {
  14. mysql_query('COMMIT', $linkCron1);
  15. }
  16. }


Ponieważ raz na jakiś czas dodaje mi transakcję (insert into transaction_pay...), ale już nie aktualizuje ilości towarów (update transactions ...)
Wspomnę tylko, że ten kawałek kodu jest dość często uruchamiany (cronem co 3minuty a następnie w pętli po kilkaset razy).

Gdzie szukać problemu?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@lukaskolista, @markonix: Każda seria zapytań (włączając w to pojedyncze zapytania) musi być objęta transakcją. W przypadku pojedynczych zapytań można sobie co najwyżej darować jawne deklarowanie transakcji, bo domyślnie włączony jest autocommit.

@jakal: Przede wszystkim przydała by się informacja o wystąpieniu błędu. Poza rollbackiem mógłbyś też zapisywać informację o przyczynie niepowodzenia operacji - ułatwiłoby to Ci pracę. Dodatkowo, nie muszę chyba wspominać o tym, że użycie PDO znacznie uprościłoby kod.

Cytat
Na drugiej tabeli jest wykonywanych znacznie więcej operacji, również przez inny cron.
Jakiego typu są to operacje? Mogą one nie mieć kompletnie żadnego znaczenia, być może wystarczy jedynie zwiększyć poziom izolacji transakcji, a być może rzeczywiście trzeba będzie blokować całą tabelę.

EDIT: Sam kod, mimo iż tragicznej jakości, wydaje się być w porządku. Problem jest prawdopodobnie gdzie indziej.

Ten post edytował Crozin 27.09.2012, 13:49:22
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 10:16