我已经制作了这个代码用于给出+1分,但它不能正常工作。
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
$ points变量现在是用户的点数。我希望它加一个...所以如果他有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)."'");
另外,你做错了的是你把旧点数作为字符串(points='5'+1
)传递,你不能在字符串中添加数字。 ;)
希望我在第一篇文章中不会偏离主题,但我想扩展一下整数转换为字符串,因为有些受访者似乎错了。
因为此查询中的表达式使用算术运算符(加号+),MySQL会将表达式中的任何字符串转换为数字。
为了演示,以下将产生结果6:
SELECT ' 05.05 '+'.95';
MySQL中的字符串连接需要CONCAT()函数,所以这里没有歧义,MySQL将字符串转换为浮点数并将它们加在一起。
我实际上认为初始查询不起作用的原因很可能是因为$ points变量实际上并未设置为用户的当前点。它被设置为零,或者未设置:MySQL将空字符串转换为零。为了便于说明,以下内容将返回0:
SELECT ABS('');
就像我说的那样,我希望我不会过于偏离主题。我同意Daan和Tomas对这个特殊问题有最好的解决方案。
"UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'"
另外,要“增加”字符串,在更新时,请使用CONCAT
update dbo.test set foo=CONCAT(foo, 'bar') where 1=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."'");
您在原始查询中“将”整数值“转换”为字符串...
您应该使用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
));
你为什么不让PHP做这个工作?
"UPDATE member_profile SET points= ' ". ($points+1) ." ' WHERE user_id = '".$userid."'"