Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Zwiększanie stanu konta
Forum PHP.pl > Forum > Przedszkole
boro11
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.
nospor
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....
boro11
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);

nospor
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.