gpt4 book ai didi

PHP 如何检查自己是否负担得起?

转载 作者:行者123 更新时间:2023-11-29 01:25:22 25 4
gpt4 key购买 nike

我有这个:

    $scCost = $row["gpsc"];
mysql_query("
UPDATE member_profile
SET points = points-$scCost
WHERE user_id = '".mysql_real_escape_string($userid)."'
") or die(mysql_error());

这需要用户的积分 - scCost。

如何检查用户是否负担得起?因此,如果用户有 30 个且 $scCost 为 40..

最佳答案

您可以通过向查询添加额外条件并使用 mysql_affected_rows() 以原子方式完成此操作:

$scCost = $row["gpsc"];
$user_id = mysql_real_escape_string($user_id);
$sql = <<<END
UPDATE member_profile
SET points = points - $scCost
WHERE user_id = $user_id
AND points >= $scCost
END;
mysql_query($sql);
if (mysql_affected_rows() > 0) {
// they can afford it
}

这比先执行 SELECT 后执行 UPDATE 要好得多,后者会引入竞争条件。

警告: mysql_affected_rows() 返回已更改的行数。。理解这一点很重要。如果您将 0 成本传递给此查询,您最终会得到:

UPDATE member_profiles SET points = points - 0 ...
在这种情况下,

mysql_affected_rows()始终返回 0,因为没有行发生更改。因此,如果 0 成本是有效的情况,您需要对此进行过滤,而根本不必运行查询。

如果您要更新一行,这也很有效,但如果您想一次修改多行,它就会变得有点困难。然后你会遇到这样的问题:

  • 如果某些“行”负担得起而其他“行”负担不起怎么办?
  • 您希望它们都失败吗?
  • 您如何报告哪些人负担不起?
  • 如何以原子方式完成这一切?

您可能最好一次执行一个UPDATE,尽管这通常不是推荐的方法,而且肯定不会一次扩展到数千个更新。

关于PHP 如何检查自己是否负担得起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com