我正在使用 PHP 和 MYSQL 为排行榜制作用户评分系统,但我现在卡住了。我知道这与 INSERT INTO .... ON DUPLICATE KEY UPDATE 有关
这是一个 IPN,基本上它应该做的是获取地址和金额,如果地址尚不存在,则将其添加到排行榜中的新行。如果该地址确实存在,那么它应该选择该地址并将新金额添加到该行中现有金额的顶部。
提前致谢。
最佳答案
mysql_query("INSERT INTO leaderboard (id, address, amount) VALUES ('', '$sender', '$amount') ON DUPLICATE KEY UPDATE amount=amount+$amount") or die(mysql_error())
一些注意事项,您的 mysql 已被弃用,您应该改用 mysqli。
此外,$amount 的第二次使用容易受到 SQL 注入(inject)攻击。也使用单引号对其进行转义(最好使用 mysql_real_escape_string
然后使用单引号或只使用准备好的语句)。
如果您有一个自动递增的 PK,请将其从插入查询中排除(您的代码试图将一个空字符串插入到 INT
列中,这是行不通的。)还要注意,如果地址是指IP地址,不同的用户可以拥有相同的地址,而一个用户可以拥有多个地址。您可能需要考虑:
- 使用 PK 而不是地址
- 找到其他东西来唯一标识用户
忽略所有这些直接回答您的问题:
"INSERT INTO leaderboard (address, amount) VALUES ('$sender', '$amount') ON DUPLICATE KEY UPDATE amount=amount+'$amount'"
如果要求地址是唯一的,应该可以正常工作。请参阅:http://sqlfiddle.com/#!2/cf7b1/1
(如果您不添加唯一索引,它将无法正常工作,您始终可以只识别 PK 并改用它)
关于php - 如果 MYSQL 中存在则更新用户分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038721/