Answers:
您也可以这样做:
mysql_query("
UPDATE member_profile
SET points = points + 1
WHERE user_id = '".$userid."'
");
UPDATE xyz SET points = MIN(points + 1, YOUR_LIMIT_VALUE_HERE)
,但是没有用。起作用的是:UPDATE xyz SET points = points + 1 WHERE points < YOUR_LIMIT_VALUE_HERE
。
希望我不会在我的第一篇文章中脱口而出,但由于某些受访者似乎认为错误,我想在整数到字符串的转换方面做些扩展。
由于此查询中的表达式使用算术运算符(加号+),因此MySQL会将表达式中的所有字符串转换为数字。
为了演示,将产生以下结果6:
SELECT ' 05.05 '+'.95';
MySQL中的字符串连接需要CONCAT()函数,因此这里没有歧义,MySQL将字符串转换为浮点数并将它们加在一起。
我实际上认为初始查询不起作用的原因很可能是因为$ points变量实际上并未设置为用户的当前点。它要么设置为零,要么未设置:MySQL将空字符串转换为零。为了说明,以下将返回0:
SELECT ABS('');
就像我说的那样,我希望我不会太过关注话题。我同意Daan和Tomas为这个特定问题提供最佳解决方案。
您应该使用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
));
您为什么不让PHP来完成这项工作?
"UPDATE member_profile SET points= ' ". ($points+1) ." ' WHERE user_id = '".$userid."'"