【问题标题】:mysql update mysql info [closed]mysql更新mysql信息[关闭]
【发布时间】:2012-12-13 19:29:10
【问题描述】:

我有一个积分系统,人们可以用积分购买不同的东西。现在我要做的是让人们可以升级到 [PRO] 用户。当他们注册时,他们以 [user] 身份登录 mysql。我正在编写代码,以便在行动后他们失去 50 分,他们的 [user] 被 [PRO] 取代。但现在我用 [pro] 替换。这是我的代码:

$insert = "UPDATE `users` SET `points` = (`points`-50) WHERE `username` = '".$username."' and points > 50";
mysql_query($insert);
if (mysql_affected_rows() > 0)
{

    // other codes

  $insert =  "UPDATE users SET rights=' [user]'  WHERE rights=' [pro]' WHERE `username` = '".$username."'";
    mysql_query($insert); 
header('location: succes.php');
}else{
    echo "You don't have enough points to upgrade to [PRO]";
}

【问题讨论】:

  • 你看到的结果是什么?
  • 旁注:在代码的第一行使用之前,$username 是否安全转义?
  • @nappingrabbi:我没有得到结果...也许这就是为什么?-.-
  • 第二个旁注:如果用户有 =50 点,他可以得到 pro 吗?可能由你的第一行代码条件应该是WHERE username` = '".$username."' 和 points >= 50"`

标签: php database insert sql-update


【解决方案1】:

代替:

$insert =  "UPDATE users SET rights=' [user]'  WHERE rights=' [pro]' WHERE `username` = '".$username."'";

试试:

$insert =  "UPDATE users SET rights=' [pro]' WHERE `username` = '".$username."'";

您有两个 WHERE 子句,这不起作用。拿走 50 分后,只需将他们的权利更新为 pro。

您还可以将您的第一个和第二个查询与以下内容结合起来:

$insert = "UPDATE `users` SET `points` = (`points`-50), rights = ' [pro]' WHERE `username` = '".$username."' and points > 50";

【讨论】:

  • 谢谢,工作得很好!会接受,但需要等待 4 分钟:)
【解决方案2】:

您可以在一个查询中实现所有这些。

UPDATE users SET rights=' [pro]', points = points - 50 WHERE username = '$username' AND points >= 50

您也可以考虑添加一个条件以仅在 rights=' [user]' 时执行此操作,除非您在应用中有其他方式强制此升级选项仅适用于当前非“专业”的人。

【讨论】:

    【解决方案3】:

    只是为了完成 Sean sql 和你的代码

    在你的第一个查询中替换它

        and points >= 50
    

    因为如果用户有 50 个,他也可以升级到 [pro]。

    【讨论】:

    • 作为评论而不是答案会更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多