php - 如果 MYSQL 中存在则更新用户分数

标签 php mysql

我正在使用 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地址,不同的用户可以拥有相同的地址,而一个用户可以拥有多个地址。您可能需要考虑:

  1. 使用 PK 而不是地址
  2. 找到其他东西来唯一标识用户

忽略所有这些直接回答您的问题:

"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/

相关文章:

php - Mysql - 将行转换为列

mysql - 为什么 MySQL 不计算该列?我怎样才能重写我的查询以使其实现?

mysql在不同条件下从另一个表连接列

c# - 无法连接到本地服务器上的 MySQL

php - php中require和require_once的区别

php - 从日期减去一定数量的小时、天、月或年

用于加载速度的 PHP 和 Javascript/Ajax 缓存 - JSON 和 SimpleXML

python - MySQL-用Python替换列的所有字符

android - 使用 Sqlite 下载并上传到同步数据库 MySql

php - 如何使用 PhpSpreadsheet 从表格单元格中检索日期?