mysql更新查询中的增量值

时间:2010-02-13 21:37:20

标签: php mysql sql sql-update

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

mysql_query("
    UPDATE member_profile 
    SET points= ' ".$points." ' + 1 
    WHERE user_id = '".$userid."'
");
$ points变量现在是用户点数。我希望它加一个...所以如果他喜欢5分,那应该是5 + 1 = 6 .. 但是它没有,只是改为1

我做错了什么?谢谢

9 个答案:

答案 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."'"