2012-09-05 26 views
0

我正在爲一個MMORPG設計一個數據庫,而管理員後端。我需要一個功能,允許我爲數據庫中的每個帳戶添加指定數量的遊戲主幣種:Gold如何將數學mysql查詢應用於數據庫中的每一行?

這是我有:

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添加到該行,然後將該值應用於所有行。我需要它在每一行上單獨執行。

+0

的幾個注意事項: 不要使用新的應用mysql_職能;使用mysqli或PDO。 您不需要在查詢結尾添加分號(大部分時間)。 您可以在查詢中爲字符串數據使用單引號,這樣您就不必轉義雙引號。 –

+1

您的代碼非常活潑。當你提取用戶的黃金價值時,它可能在其他地方發生了變化,並用舊值覆蓋它。對於剛買了昂貴東西的人來說很好。對那些剛剛獲得大量黃金的人不利。無論哪種方式,你都會讓很多人因爲這種糟糕的代碼而生氣 –

+0

G-NUGGET,我從來沒有使用過任何一種,我使用過MySQL。我現在正在研究PDO,並試圖找出所有問題。另外,我嘗試使用單引號,它只是傳遞一個NULL值。 Marc B.,我接受關於改進此代碼的建議。下面我已經實施了Adrian的解決方案。 – Justin

回答

5

爲什麼做它在兩個查詢什麼是錯的一個

UPDATE users SET gold = gold + 50; 
+1

完美。謝謝。 – Justin

1

的mysql_query( 「更新mmo_db1users SET gold =金+ 50」);

ps,mysql * = bad

1

爲什麼選擇第一個?如果你想給大家一個額外的50金,爲什麼不這樣做:

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

你確定 - PHP用雙引號替換變量 –

+0

@AdrianCornish整個查詢用雙引號引起,所以第二個轉義的雙引號看起來很誇張。我想它讓我看到'update ...'的輸出......「但是是的,你說得對,不需要concat操作符。 – Fluffeh

+0

同意將int轉換爲字符串以傳遞迴數據庫有點奇怪:-) –