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
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Tak się zastanawiam czy po prostu nie możesz sprawdzić czy zapytanie się wykonało i jeśli tak to wykonujesz drugie?

Transakcje wydawało mi się, że służą troszkę bardziej rozbudowanym celom - np. dodawanie tysiąca rekordów - jeden się nie doda to cofasz i naprawiasz.
Go to the top of the page
+Quote Post
jakal
post
Post #3





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

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


Cytat(markonix @ 27.09.2012, 13:02:46 ) *
Tak się zastanawiam czy po prostu nie możesz sprawdzić czy zapytanie się wykonało i jeśli tak to wykonujesz drugie?


Tak robiłem do tej pory, ale czasami zdarzało się, że dodawało do 1 tabeli, ale nie aktualizowało w 2 tabeli.
Dlatego pomyślałem o transakcjach.

Mam jeszcze jeden pomysł.
Bo ten kod jest uruchamiany w cronie i bardzo często używany (setki razy wykonywany co kilka minut).
Na drugiej tabeli jest wykonywanych znacznie więcej operacji, również przez inny cron.

Może po prostu jest natłok operacji na danej bazie i czasami operacje nie są wykonywana?

Jest na to jakaś metoda? Czy blokowanie tablic jest odpowiednie? (nie chciałbym zeby reszta zapytań w tym czasie jak wykonuje jedno to się nie wykonywała lub zwracała błąd, tylko oczekiwała na swoją kolej)


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: 3.10.2025 - 08:33