Stworzyłem ten kod, aby dawać +1 punkt, ale nie działa poprawnie.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
zmienna $ points jest punktami użytkownika w tej chwili .. Chcę, żeby to plus jeden do niego .. więc na przykład jeśli miał 5 punktów, to powinno być 5 + 1 = 6 .. ale tak nie jest, po prostu się zmienia do 1
Co zrobiłem źle? Dziękuję Ci
php
mysql
sql
sql-update
Karem
źródło
źródło
Odpowiedzi:
Możesz też po prostu zrobić to:
źródło
UPDATE xyz SET points = MIN(points + 1, YOUR_LIMIT_VALUE_HERE)
i nie udało się. Co nie działa to:UPDATE xyz SET points = points + 1 WHERE points < YOUR_LIMIT_VALUE_HERE
.Możesz to zrobić bez konieczności sprawdzania rzeczywistej liczby punktów, dzięki czemu zaoszczędzisz czas i zasoby podczas wykonywania skryptu.
W przeciwnym razie źle robiłeś, że przekazałeś starą liczbę punktów jako string (
points='5'+1
) i nie możesz dodać liczby do ciągu. ;)źródło
Mam nadzieję, że nie przejdę do tematu offtopic w moim pierwszym poście, ale chciałbym trochę rozwinąć rzutowanie liczby całkowitej na łańcuch, ponieważ niektórzy respondenci wydają się mieć błąd.
Ponieważ wyrażenie w tym zapytaniu używa operatora arytmetycznego (symbol plusa +), MySQL skonwertuje wszystkie ciągi w wyrażeniu na liczby.
Aby zademonstrować, następujące wyniki dadzą wynik 6:
Konkatenacja ciągów w MySQL wymaga funkcji CONCAT (), więc nie ma tutaj dwuznaczności, a MySQL konwertuje ciągi znaków na zmiennoprzecinkowe i dodaje je razem.
Właściwie uważam, że powodem, dla którego początkowe zapytanie nie działało, jest najprawdopodobniej to, że zmienna $ points nie była w rzeczywistości ustawiona na bieżące punkty użytkownika. Było albo ustawione na zero, albo było nieustawione: MySQL wyrzuci pusty łańcuch na zero. Na przykład poniższe zwróci 0:
Tak jak powiedziałem, mam nadzieję, że nie jestem zbyt odbiegający od tematu. Zgadzam się, że Daan i Tomas mają najlepsze rozwiązania tego konkretnego problemu.
źródło
źródło
Ponadto, aby "zwiększyć" ciąg, podczas aktualizacji użyj
CONCAT
źródło
Kto musi zaktualizować ciąg i liczby
SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);
źródło
Należy używać PDO, aby zapobiec ryzyku iniekcji SQL.
Możesz połączyć się z DB w ten sposób:
Nie ma potrzeby wysyłania zapytań do bazy danych, aby uzyskać liczbę punktów. Możesz inkrementować bezpośrednio w zapytaniu aktualizującym (
points = points + 1
).(uwaga: również nie jest dobrym pomysłem zwiększanie wartości za pomocą PHP, ponieważ musisz najpierw wybrać dane, a wartość może ulec zmianie, jeśli inni użytkownicy ją zaktualizują).
źródło
Usuń
'
wokółpoint
:W pierwotnym zapytaniu „rzutujesz” wartość całkowitą na łańcuch ...
źródło
Dlaczego nie pozwolisz PHP wykonać pracy?
źródło