在MySQL更新查询中增加值

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

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

$ pointsvariables是用户的分数现在..我想要它加上一个..所以例如,如果他有5点,应该是5 + 1 = 6 .. 但它没有,它只是改变到1

我做错了什么? 谢谢

你也可以这样做:

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

你可以做到这一点,而不必查询实际的点数,所以在脚本执行过程中会节省一些时间和资源。

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

否则,你做错了什么是你作为一个string( points='5'+1 )传递旧点的数量,你不能将一个数字添加到一个string。 ;)

希望在第一篇文章中我不会偏离主题,但是我想扩大一点整数到string,因为有些答复似乎有错误。

由于该查询中的expression式使用算术运算符(加号+),因此MySQL会将expression式中的任何string转换为数字。

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

 SELECT ' 05.05 '+'.95'; 

MySQL中的string连接需要CONCAT()函数,因此这里没有歧义,MySQL将string转换为浮点数并将它们相加。

我实际上认为最初的查询不起作用的原因很可能是因为$ pointsvariables实际上并没有设置为用户的当前点。 它被设置为零,或者未设置:MySQL会将空string转换为零。 为了说明,以下将返回0:

 SELECT ABS(''); 

就像我说的,我希望我不要太离题。 我同意大安和托马斯对这个问题有最好的解决scheme。

另外,要“增加”string,更新时使用CONCAT

 update dbo.test set foo=CONCAT(foo, 'bar') where 1=1 
 "UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'" 

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

删除'周围的point

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

您正在“铸造”一个整数值,以在您的原始查询string…

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

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

您应该使用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'); } 

不需要查询数据库来获得点数。 您可以直接在更新查询中增加( points = points + 1 )。

(注意:另外,用PHP增加值并不是一个好主意,因为您需要先select数据,如果其他用户更新,则值可以更改。)

 $req = $bdd->prepare('UPDATE member_profile SET points = points + 1 WHERE user_id = :user_id'); $req->execute(array( 'user_id' => $userid ));