2016-10-11 2 views
1

내 사이트에 사용자의 IP 주소를 기록하기 위해 노력하고, 나는 그래서중복 키를 올바르게 사용 하시겠습니까? 작동 안함. MySQL은/​​PHP

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

에 로그온 나는 매번에게 사용자의 로그를 기록하지 오전 다음과 같은 흐름을 갖고 싶어 새 IP 주소에서 온 것입니다. 나는 올바른 코드를 가지고 있다고 생각했지만 중복은 여전히 ​​DB에 들어가고있다. 누구든지 내가 잘못 가고있는 것을 볼 수 있습니까?

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)); 
} 

나는 또한 DUPLICATE KEY UPDATE ip_address = ip_address ON 시도했지만 문제가 해결되지 않았다.

enter image description here

을하며 다음과 같이 나오고 :

내 DB는 다음과 같습니다

ip_address user_id 
10.245.1.38 378 
10.245.1.38 378 
+1

열에 고유 한 키를 설정했을 수 있습니까? – RonaldPK

+0

이 경우에는 중복 키 업데이트, 고유 인덱스/기본 키 및 간단한 삽입 만 필요하지 않습니다. – Shadow

답변

5

당신이 두 열에 대한 고유 인덱스를 가지고 표시되지 않습니다. 다음으로 테이블에 고유 인덱스를 추가 할 수 있습니다

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

이 IP 주소와 사용자 ID의 특정 조합에 대한 고유 제약 조건을 만듭니다. 중복 키가있는 경우


는 제안으로, 당신은 로그인을 시도 할 때 추적하고 현재 타임 스탬프에 해당 필드를 업데이트하기 위해 user_ip 테이블에 세 번째 열을 추가 할 수 있습니다.

+0

큰 감사 크리스. 나머지 코드는 변경하지 않아도됩니다. – user1180888

+0

내가 만든 UNIQUE 열은 '구조'에 나타나지 않지만 성공적으로 생성되었다고합니다. 이게 정상인가? – user1180888

+1

코드를있는 그대로 변경하지 않아야합니다. 나는 phpMyAdmin 인터페이스에별로 익숙하지 않다. 'SHOW CREATE TABLE user_ip'를 실행 해 볼 수있는 것을 볼 수 있습니까? –