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%)
-----


Cytat
Tak chyba zrobię, jeśli drugie zapytanie się nie wykona to zapiszę czemu, razem z treścią zapytania.
Wiem, że PDO by ułatwiło, ale aplikacja ma za dużo kodu, żeby teraz zmieniać wszytko na PDO.
Powinieneś zapisywać informację o wystąpieniu dowolnego, nawet nieistotnego błędu i najlepiej od razu przerywać działanie całej aplikacji w przypadku jego wystąpienia. Kod, który generuje nieobsłużone błędy właściwie z definicji działa w sposób nieokreślony.
Cytat
W większości SELECT, ale też często UPDATE.
Nie da się teraz stwierdzić czy te zapytania mają w ogóle jakikolwiek związek z problemem, ale być może zapytania SELECT operują na innym niż przewidywanym zestawie rekordów - skutek modyfikowania tabeli przez inny proces. Poczytaj o wspomnianych wcześniej poziomach izolacji transakcji, to będziesz wstanie stwierdzić czy to może powodować błąd.
Cytat
Czemu tragiczna jakość? Po prostu czysty PHP + MYSQL, nie obiektowy.
Brak obsługi błędów, nie korzystanie z preparowanych zapytań w momencie gdy to samo zapytanie jest wykonywane setki razy z rzędu, brak odpowiedniego przygotowania danych do wrzucenia w treść zapytania SQL, niepotrzebnie wiele poziomów zagłębienia kodu, niepotrzebne powtarzanie fragmentów kodu, nieczytelne nazwy zmiennych/formatowanie kodu... to tak na pierwszy rzut oka.
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: 16.09.2025 - 20:59