Witam,
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.