关于正确使用重复键?不工作。 MySQL / PHP

On Duplicate key proper use? Not working. MySQL / PHP

我想在我的网站上记录用户的 IP 地址,我希望在用户登录时有以下流程

if (new ip address detected)
  enter in to db
else if (ip address has already been recorded)
  do nothing

这样我就不会在每次用户登录时都记录下来,即使它来自新的 IP 地址。我以为我有正确的代码,但重复项仍在进入数据库。谁能看到我哪里出错了?

public function insertIpAddress($user_id, $user_ip) {
    return $this->dbHandler->DbQuery("INSERT into user_ip (user_id, ip_address) 
                  VALUES (?,?) ON DUPLICATE KEY UPDATE `user_id` = `user_id`",
                  array($user_id,$user_ip));
}

我也试过 ON DUPLICATE KEY UPDATE ip_address = ip_address,但是没用。

我的数据库是这样的:

结果是这样的:

ip_address   user_id
10.245.1.38  378
10.245.1.38  378

您似乎没有针对这两列的唯一索引。您可以使用以下方法为 table 添加唯一索引:

ALTER TABLE user_ip 
    ADD UNIQUE `unique_user_ip_address_user_id`(`ip_address`, `user_id`);

这为 IP 地址和用户 ID 的特定组合创建了唯一约束。


作为建议,您可以在 user_ip table 中添加第三列以跟踪尝试登录的时间,如果存在重复键,则将该字段更新为当前时间戳。