我已经制作了这个代码用于给出+1分,但它无法正常工作。
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
我做错了什么?谢谢
答案 0 :(得分:277)
您也可以这样做:
mysql_query("
UPDATE member_profile
SET points = points + 1
WHERE user_id = '".$userid."'
");
答案 1 :(得分:19)
您可以在不必查询实际点数的情况下执行此操作,因此在脚本执行期间可以节省一些时间和资源。
mysql_query("UPDATE `member_profile` SET `points`= `points` + 1 WHERE `user_id` = '".intval($userid)."'");
否则,你错误的是你将旧点数作为字符串(points='5'+1
)传递,并且你不能在字符串中添加数字。 ;)
答案 2 :(得分:10)
希望我在第一篇文章中不会偏离主题,但是我想扩展一下将整数转换为字符串,因为一些受访者似乎错了。
因为此查询中的表达式使用算术运算符(加号+),MySQL会将表达式中的任何字符串转换为数字。
为了演示,以下将产生结果6:
SELECT ' 05.05 '+'.95';
MySQL中的字符串连接需要CONCAT()函数,所以这里没有歧义,MySQL将字符串转换为浮点数并将它们加在一起。
我实际上认为初始查询不起作用的原因很可能是因为$ points变量实际上并未设置为用户的当前点。它被设置为零,或者未设置:MySQL将空字符串转换为零。为了便于说明,以下内容将返回0:
SELECT ABS('');
像我说的那样,我希望我不会过于偏离主题。我同意Daan和Tomas对这个特殊问题有最好的解决方案。
答案 3 :(得分:7)
此外,要“增加”字符串,在更新时,请使用CONCAT
update dbo.test set foo=CONCAT(foo, 'bar') where 1=1
答案 4 :(得分:6)
"UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'"
答案 5 :(得分:2)
谁需要更新字符串和数字
SET @a = 0;
UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);
答案 6 :(得分:1)
移除'
周围的point
:
mysql_query("UPDATE member_profile SET points=".$points."+1 WHERE user_id = '".$userid."'");
您正在将原始查询中的整数值“转换”为字符串...
答案 7 :(得分:1)
您应该使用PDO来防止SQL注入风险。
您可以像这样连接到数据库:
try {
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=xxxx;dbname=xxxx', 'user', 'password', $pdo_options);
$bdd->query('SET NAMES "utf8"');
} catch (PDOException $e) {
exit('Error');
}
无需查询DB即可获得积分数。您可以直接在更新查询(points = points + 1
)中增加。
(注意:另外,使用PHP增加值不是一个好主意,因为您需要首先选择数据,如果其他用户更新了数值,则值可能会更改。)
$req = $bdd->prepare('UPDATE member_profile SET
points = points + 1
WHERE user_id = :user_id');
$req->execute(array(
'user_id' => $userid
));
答案 8 :(得分:-1)
为什么不让PHP做这个工作?
"UPDATE member_profile SET points= ' ". ($points+1) ." ' WHERE user_id = '".$userid."'"