Kar*_*rem 125 php mysql sql sql-update
我已经制作了这个代码用于给出+1分,但它不能正常工作.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
Run Code Online (Sandbox Code Playgroud)
$ points变量现在是用户的点数.我希望它加一个...所以如果他有5分,那么应该是5 + 1 = 6 .. 但它不是,它只是改变到1
我做错了什么?谢谢
Tom*_*kas 292
你也可以这样做:
mysql_query("
UPDATE member_profile
SET points = points + 1
WHERE user_id = '".$userid."'
");
Run Code Online (Sandbox Code Playgroud)
Daa*_*aan 21
您可以在不必查询实际点数的情况下执行此操作,因此在脚本执行期间可以节省一些时间和资源.
mysql_query("UPDATE `member_profile` SET `points`= `points` + 1 WHERE `user_id` = '".intval($userid)."'");
Run Code Online (Sandbox Code Playgroud)
另外,你做错了的是你将旧点数作为字符串(points='5'+1)传递,并且你不能在字符串中添加数字.;)
小智 10
希望我在第一篇文章中不会偏离主题,但我想扩展一下整数转换为字符串,因为有些受访者似乎错了.
因为此查询中的表达式使用算术运算符(加号+),MySQL会将表达式中的任何字符串转换为数字.
为了演示,以下将产生结果6:
SELECT ' 05.05 '+'.95';
Run Code Online (Sandbox Code Playgroud)
MySQL中的字符串连接需要CONCAT()函数,因此这里没有歧义,MySQL将字符串转换为浮点数并将它们加在一起.
我实际上认为初始查询不起作用的原因很可能是因为$ points变量实际上并未设置为用户的当前点.它被设置为零,或者未设置:MySQL将空字符串转换为零.为了便于说明,以下内容将返回0:
SELECT ABS('');
Run Code Online (Sandbox Code Playgroud)
就像我说的那样,我希望我不会过于偏离主题.我同意Daan和Tomas对这个特殊问题有最好的解决方案.
"UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'"
Run Code Online (Sandbox Code Playgroud)
小智 7
另外,要"增加"字符串,请在更新时使用 CONCAT
update dbo.test set foo=CONCAT(foo, 'bar') where 1=1
Run Code Online (Sandbox Code Playgroud)
接受的答案很好,但不能使用空值尝试这个
mysql_query("
UPDATE member_profile
SET points = IFNULL(points, 0) + 1
WHERE user_id = '".$userid."'
");
Run Code Online (Sandbox Code Playgroud)