Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Zwiększanie stanu konta
boro11
post
Post #1





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 9.07.2010
Skąd: Warszawa

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


Witam,
mam taki kod:

  1. try
  2. {
  3. // Connect to Database.
  4. $dbh = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.";port=".DB_HOST_PORT, DB_USER, DB_PASSWORD, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING ));
  5. // Add new transaction
  6. $query = $dbh->prepare("INSERT INTO ".DB_PREFIX."transactions(id, uid, oid, new, time) VALUES (:id,:uid,:oid,:new,:time) ON DUPLICATE KEY UPDATE id=:id,uid=:uid,oid=:oid,new=:new,time=:time");
  7. $query->bindParam(':id', $id, PDO::PARAM_INT);
  8. $query->bindParam(':uid', $uid, PDO::PARAM_INT);
  9. $query->bindParam(':oid', $oid, PDO::PARAM_INT);
  10. $query->bindParam(':new', $new, PDO::PARAM_INT);
  11. $query->bindParam(':time', $timestamp, PDO::PARAM_STR);
  12. if(!$query->execute())
  13. $result = 0; // Problems executing SQL. Fail.
  14. // Add/Update user.
  15. $query = $dbh->prepare("INSERT INTO ".DB_PREFIX."users(uid, total, time) VALUES (:uid,:total,:time) ON DUPLICATE KEY UPDATE uid=:uid,total=:total,time=:time");
  16. $query->bindParam(':uid', $uid, PDO::PARAM_INT);
  17. $query->bindParam(':total', $total, PDO::PARAM_INT);
  18. $query->bindParam(':time', $timestamp, PDO::PARAM_STR);
  19. if(!$query->execute())
  20. $result = 0; // Problems executing SQL. Fail.
  21. $dbh = null;
  22. }
  23. catch (PDOException $e)
  24. {
  25. exit($e->getMessage());
  26. }


Za każdym razem wartość w total jest nadpisywana od nowa. np. ktoś miał 1000 pkt. i zdobył kolejny tysiąc to zamiast 2 tysięcy ma znowu 1. Jak mogę to zrobić poprawnie? Wiem, że mogę pobrać najpierw z bazy danych stan konta i dodać ilość zdobytych punktów, ale w zwykłym zapytaniu można używać konstrukcji SET total = total + 1 (wartość dowolna). Czy w przypadku PDO również można to zrobić podobnie? Jeśli tak to jak.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Kurcze, najpierw piszesz, ze wiesz, ze to sie robi tak:
total = total + 1

a potem co do czego w kodzie dajesz:
total = total

i wielce zdziwiony ze sie nadpisuje a nie dodaje....


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
boro11
post
Post #3





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 9.07.2010
Skąd: Warszawa

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


Rzeczywiście słabo to rozpisałem. Finalne zapytanie jest takie i działa:

  1. $query = $dbh->prepare("INSERT INTO ".DB_PREFIX."users(uid, total, time) VALUES (:uid,:total,:time) ON DUPLICATE KEY UPDATE uid=:uid,total=:total + '$total',time=:time");


ale chodzi mi o to czy muszę dodać coś tutaj:

  1. $query->bindParam(':total', $total, PDO::PARAM_INT);

Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




total=:total + '$total'
nie wiem jakim cudem ci to moze dzialac...

tak ma byc:
total=total + :total
I wowczas, tak, musisz bindowac $total.

Albo mozesz zrobic bez bindowania, czyli tak:
total=total + $total


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 17:55