Ich habe diesen Code für die Ausgabe von +1 Punkt erstellt, aber er funktioniert nicht richtig.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
Die Variable $ points ist momentan die Punktzahl des Benutzers. Ich möchte, dass sie plus eins dazu kommt. Wenn er also beispielsweise 5 Punkte hat, sollte sie 5 + 1 = 6 sein. Aber das tut es nicht, es ändert sich nur bis 1
Was habe ich falsch gemacht? Danke
php
mysql
sql
sql-update
Karem
quelle
quelle
Antworten:
Sie können dies auch einfach tun:
quelle
UPDATE xyz SET points = MIN(points + 1, YOUR_LIMIT_VALUE_HERE)
und es hat nicht funktioniert. Was funktionierte war :UPDATE xyz SET points = points + 1 WHERE points < YOUR_LIMIT_VALUE_HERE
.Sie können dies tun, ohne die tatsächliche Anzahl von Punkten abfragen zu müssen, wodurch Sie Zeit und Ressourcen während der Skriptausführung sparen.
Andernfalls haben Sie falsch gemacht, dass Sie die alte Anzahl von Punkten als Zeichenfolge (
points='5'+1
) übergeben haben und einer Zeichenfolge keine Zahl hinzufügen können. ;)quelle
Ich hoffe, ich werde bei meinem ersten Beitrag nicht offtopic, aber ich möchte das Casting von Integer zu String ein wenig erweitern, da einige Befragte es falsch zu verstehen scheinen.
Da der Ausdruck in dieser Abfrage einen arithmetischen Operator (das Pluszeichen +) verwendet, konvertiert MySQL alle Zeichenfolgen im Ausdruck in Zahlen.
Um dies zu demonstrieren, wird Folgendes zu Ergebnis 6 führen:
Die Verkettung von Zeichenfolgen in MySQL erfordert die Funktion CONCAT (), sodass hier keine Mehrdeutigkeit besteht und MySQL die Zeichenfolgen in Gleitkommazahlen konvertiert und addiert.
Ich denke tatsächlich, dass der Grund, warum die anfängliche Abfrage nicht funktioniert hat, höchstwahrscheinlich darin besteht, dass die Variable $ points tatsächlich nicht auf die aktuellen Punkte des Benutzers festgelegt wurde. Es wurde entweder auf Null gesetzt oder nicht gesetzt: MySQL setzt eine leere Zeichenfolge auf Null. Zur Veranschaulichung gibt Folgendes 0 zurück:
Wie gesagt, ich hoffe, dass ich nicht zu weit vom Thema entfernt bin. Ich stimme zu, dass Daan und Tomas die besten Lösungen für dieses spezielle Problem haben.
quelle
quelle
Verwenden Sie auch, um die Zeichenfolge beim Aktualisieren zu "erhöhen"
CONCAT
quelle
Wer muss Zeichenfolge und Zahlen aktualisieren
SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);
quelle
Sie sollten PDO verwenden, um das SQL-Injection-Risiko zu verhindern.
Sie können wie folgt eine Verbindung zur Datenbank herstellen:
Sie müssen die Datenbank nicht abfragen, um die Anzahl der Punkte zu ermitteln. Sie können direkt in der Update-Abfrage (
points = points + 1
) erhöhen .(Hinweis: Es ist auch keine gute Idee, den Wert mit PHP zu erhöhen, da Sie zuerst die Daten auswählen müssen und der Wert geändert werden kann, wenn andere Benutzer ihn aktualisieren.)
quelle
Entfernen Sie die
'
umpoint
:Sie "gießen" einen ganzzahligen Wert in eine Zeichenfolge in Ihrer ursprünglichen Abfrage ...
quelle
Warum lässt du PHP nicht den Job machen?
quelle