Php 如何将数学mysql查询应用于数据库中的每一行?

Php 如何将数学mysql查询应用于数据库中的每一行?,php,mysql,Php,Mysql,我正在为一个MMORPG设计一个数据库,以及管理员后端。我需要一个函数,允许我向数据库中的每个帐户添加指定数量的游戏主要货币:Gold 这就是我所拥有的: function massAddGold($gold_amount){ dbconnect(); $value=mysql_query("SELECT * from `mmo_db1`.`users`;"); while ($row=mysql_fetch_array($value)){ $curren

我正在为一个MMORPG设计一个数据库,以及管理员后端。我需要一个函数,允许我向数据库中的每个帐户添加指定数量的游戏主要货币:
Gold

这就是我所拥有的:

function massAddGold($gold_amount){
    dbconnect();
    $value=mysql_query("SELECT * from `mmo_db1`.`users`;");
    while ($row=mysql_fetch_array($value)){
        $currentgold=$row['gold'];
        $newgold=$currentgold+$gold_amount;
        mysql_query("UPDATE  `mmo_db1`.`users` SET  `gold` =  \"$newgold\";");
    }
    dbclose();
}
其中
mmo_db1
是数据库的名称


当我执行命令时,
massAddGold(“50”)然后检查数据库。它获取具有最高值
Gold
的行,将
50 Gold
添加到该行,然后将该值应用于所有行。我需要它在每一行上分别执行。

为什么在两个查询中执行它?一个查询有什么问题

UPDATE users SET  gold = gold + 50;
mysql_查询(“更新
mmo_db1
users
SET
gold
=gold+50”)


ps,mysql*=坏的

为什么要先选择一个?如果你想给每个人额外的50金,为什么不做一些类似的事情:

UPDATE  `mmo_db1`.`users` SET  `gold` =  `gold`+ $newgold;

注意:不要在新的应用程序中使用mysql_u函数;使用mysqli或PDO。您不需要在查询末尾添加分号(大多数情况下)。您可以在查询中对字符串数据使用单引号,这样就不必转义双引号。您的代码非常快速。当你调出一个用户的gold值时,它可能已经在其他地方被更改了,你用旧值覆盖它。对那些刚买了昂贵东西的人来说很好。对那些刚得到很多金子的人来说是不好的。不管怎样,这种糟糕的代码块会让很多人发疯,我从来没有用过任何一种,我是用MySQL学习的。我现在正在调查PDO,并试图弄清楚一切。另外,我尝试使用单引号,它只是传递了一个空值。Marc B.,我愿意接受关于改进此代码的建议。我已经在下面实现了Adrian的解决方案。你确定吗?PHP用双精度替换变量quotes@AdrianCornish整个查询都使用双引号,因此第二个转义的双引号看起来非常有用。我想看到
update的输出会让我很吃惊。。。set gold=“$newgold”…
是的,你是对的,不需要concat运算符。同意将int转换为字符串以传递回DB:-)有点奇怪