mam taki kod:
try { // Connect to Database. $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 )); // Add new transaction $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"); $query->bindParam(':id', $id, PDO::PARAM_INT); $query->bindParam(':uid', $uid, PDO::PARAM_INT); $query->bindParam(':oid', $oid, PDO::PARAM_INT); $query->bindParam(':new', $new, PDO::PARAM_INT); $query->bindParam(':time', $timestamp, PDO::PARAM_STR); if(!$query->execute()) $result = 0; // Problems executing SQL. Fail. // Add/Update user. $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"); $query->bindParam(':uid', $uid, PDO::PARAM_INT); $query->bindParam(':total', $total, PDO::PARAM_INT); $query->bindParam(':time', $timestamp, PDO::PARAM_STR); if(!$query->execute()) $result = 0; // Problems executing SQL. Fail. $dbh = null; } catch (PDOException $e) { }
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.