mysql更新查询中的增量值

问题描述 投票:122回答:9

我已经制作了这个代码用于给出+1分,但它不能正常工作。

mysql_query("
    UPDATE member_profile 
    SET points= ' ".$points." ' + 1 
    WHERE user_id = '".$userid."'
");

$ points变量现在是用户的点数。我希望它加一个...所以如果他有5分,那么应该是5 + 1 = 6 ..但它不是,它只是改变到1

我做错了什么?谢谢

php mysql sql sql-update
9个回答
286
投票

你也可以这样做:

mysql_query("
    UPDATE member_profile 
    SET points = points + 1
    WHERE user_id = '".$userid."'
");

20
投票

您可以在不必查询实际点数的情况下执行此操作,因此在脚本执行期间可以节省一些时间和资源。

mysql_query("UPDATE `member_profile` SET `points`= `points` + 1 WHERE `user_id` = '".intval($userid)."'");

另外,你做错了的是你把旧点数作为字符串(points='5'+1)传递,你不能在字符串中添加数字。 ;)


10
投票

希望我在第一篇文章中不会偏离主题,但我想扩展一下整数转换为字符串,因为有些受访者似乎错了。

因为此查询中的表达式使用算术运算符(加号+),MySQL会将表达式中的任何字符串转换为数字。

为了演示,以下将产生结果6:

SELECT ' 05.05 '+'.95';

MySQL中的字符串连接需要CONCAT()函数,所以这里没有歧义,MySQL将字符串转换为浮点数并将它们加在一起。

我实际上认为初始查询不起作用的原因很可能是因为$ points变量实际上并未设置为用户的当前点。它被设置为零,或者未设置:MySQL将空字符串转换为零。为了便于说明,以下内容将返回0:

SELECT ABS('');

就像我说的那样,我希望我不会过于偏离主题。我同意Daan和Tomas对这个特殊问题有最好的解决方案。


7
投票
"UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'"

7
投票

另外,要“增加”字符串,在更新时,请使用CONCAT

update dbo.test set foo=CONCAT(foo, 'bar') where 1=1

2
投票

谁需要更新字符串和数字SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);


1
投票

删除'周围的point

mysql_query("UPDATE member_profile SET points=".$points."+1 WHERE user_id = '".$userid."'");

您在原始查询中“将”整数值“转换”为字符串...


1
投票

您应该使用PDO来防止SQL注入风险。

您可以像这样连接到DB:

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
));

-1
投票

你为什么不让PHP做这个工作?

"UPDATE member_profile SET points= ' ". ($points+1) ." '  WHERE user_id = '".$userid."'"
© www.soinside.com 2019 - 2024. All rights reserved.