J'ai créé ce code pour donner +1 point, mais cela ne fonctionne pas correctement.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
la variable $ points est les points de l'utilisateur en ce moment .. Je veux qu'il y ajoute un .. donc par exemple s'il avait 5 points, ça devrait être 5 + 1 = 6 .. mais ça ne marche pas, ça change juste à 1
Qu'est ce que j'ai mal fait? Merci
php
mysql
sql
sql-update
Karem
la source
la source
Réponses:
Vous pouvez également faire ceci:
la source
UPDATE xyz SET points = MIN(points + 1, YOUR_LIMIT_VALUE_HERE)
et cela n'a pas fonctionné. Qu'est-ce que le travail était:UPDATE xyz SET points = points + 1 WHERE points < YOUR_LIMIT_VALUE_HERE
.Vous pouvez le faire sans avoir à interroger le nombre réel de points, ce qui vous fera gagner du temps et des ressources lors de l'exécution du script.
Sinon, ce que vous faisiez mal, c'est que vous avez passé l'ancien nombre de points sous forme de chaîne (
points='5'+1
), et vous ne pouvez pas ajouter un nombre à une chaîne. ;)la source
J'espère que je ne vais pas sortir du sujet lors de mon premier message, mais j'aimerais développer un peu le casting d'entier en chaîne car certains répondants semblent l'avoir mal.
Étant donné que l'expression de cette requête utilise un opérateur arithmétique (le symbole plus +), MySQL convertira toutes les chaînes de l'expression en nombres.
Pour démontrer, ce qui suit produira le résultat 6:
La concaténation de chaînes dans MySQL nécessite la fonction CONCAT () donc il n'y a pas d'ambiguïté ici et MySQL convertit les chaînes en flottants et les ajoute ensemble.
Je pense en fait que la raison pour laquelle la requête initiale ne fonctionnait pas est très probablement parce que la variable $ points n'était en fait pas définie sur les points actuels de l'utilisateur. Il était soit mis à zéro, soit non défini: MySQL convertira une chaîne vide à zéro. À titre d'illustration, ce qui suit renverra 0:
Comme je l'ai dit, j'espère que je ne suis pas trop hors sujet. Je conviens que Daan et Tomas ont les meilleures solutions pour ce problème particulier.
la source
la source
De plus, pour "incrémenter" la chaîne, lors de la mise à jour, utilisez
CONCAT
la source
Qui a besoin de mettre à jour la chaîne et les nombres
SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);
la source
Vous devez utiliser PDO pour éviter les risques d'injection SQL.
Vous pouvez vous connecter à DB comme ceci:
Pas besoin d'interroger DB pour obtenir le nombre de points. Vous pouvez incrémenter directement dans la requête de mise à jour (
points = points + 1
).(Remarque: De plus, ce n'est pas une bonne idée d'incrémenter la valeur avec PHP car vous devez d'abord sélectionner les données et la valeur peut changer si d'autres utilisateurs la mettent à jour.)
la source
Retirez le
'
autour dupoint
:Vous «convertissez» une valeur entière en chaîne dans votre requête d'origine ...
la source
Pourquoi ne laissez-vous pas PHP faire le travail?
la source