关于正确使用重复键?不工作。 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 中添加第三列以跟踪尝试登录的时间,如果存在重复键,则将该字段更新为当前时间戳。
我想在我的网站上记录用户的 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 中添加第三列以跟踪尝试登录的时间,如果存在重复键,则将该字段更新为当前时间戳。