Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak sprawdzić, czy zmodyfikowano rekordy?
golab
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 15.03.2013

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


Witam, mam przykładowe zapytanie:

UPDATE tabela SET kasa=if(kasa<100,kasa,kasa-100) WHERE kto=1

Chodzi o to, aby w tabeli odjąć 100 zł, jeśli ktoś posiada więcej pieniędzy niż 100 zł.
Warunków będzie więcej i kod będzie bardziej skomplikowany. Dlatego potrzebuję wiedzieć czy w chwili wykonywania instrukcji UPDATE ktoś miał więcej czy mniej niż 100 zł.

Mogę zrobić to dwoma instrukcjami:
UPDATE...
SELECT...
I w ten sposób sprawdzić, czy stan konta się zmienił.

Ale jeśli w ciągu sekundy wykonywanych będzie 1000 operacji z różnych źródeł i wtedy pomiędzy UPDATE... a SELECT... wartość kasy może się już zmienić (przynajmniej mi się tak wydaje, że to możliwe).

Jak uzyskać jakąś informację zwrotną korzystając z jednego polecenia?

Moje pytania to:

1. Czy jeśli wykonam dwa polecenia w jednym zapytaniu "UPDATE...; SELECT..." to pomiędzy UPDATE a SELECT, w tej tysięcznej części sekundy, ktoś inny może zmodyfikować tabelę?

2. Czy istnieje jakiś bardziej elegancki sposób, aby uzyskać informacje w PHP z funkcji UPDATE, czy element został zmieniony?

pozdr.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
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%)
-----


1. Każda taka operacja zwraca ilość zmodyfikowanych rekordów: PDOStatement::rowCount()/PDO::exec().
2. Podstawy relacyjnych baz danych: transakcje
Go to the top of the page
+Quote Post
kipero
post
Post #3





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

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


A dlaczego nie użyć po prostu:
  1. UPDATE tabela SET kasa = kasa - 100 WHERE kto = 1 AND kasa >= 100;

?

Ten post edytował kipero 16.03.2013, 17:03:26
Go to the top of the page
+Quote Post
golab
post
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 15.03.2013

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


Dzięki! Nakierowaliście mnie na właściwy trop.

jeszcze raz ja.
Zdecydowałem się na użycie polecenia START TRANSACTION .... COMMIT
Próbuję użyć go w funkcji, lecz wyskakuje mi komunikat

"#1422 - Explicit or implicit commit is not allowed in stored function or trigger."

dlaczego mogę użyć START TRANSACTION a nie mogę COMMIT?
Jak mogę to obejść?
Go to the top of the page
+Quote Post

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: 24.08.2025 - 14:44