2012-12-11 3 views
1

방문자 IP를 가져오고 폭발로 점을 제거하고 데이터베이스에 점없이 IP를 저장 한 다음 가져 와서 반향하는 스크립트를 작성하고 있습니다. 그러나 데이터베이스에 저장할 때 내 IP가 엉망이됩니다.My IP가 mysql에 저장 될 때 변환됩니다.

HERE IS THE CODE!

예 : 내 IP는 점없이, 178.175.35.205이다 17817535205하지만, MYSQL를 통과 할 때, 심지어 phpMyAdmin을에서 볼 수 2147483647로 변환된다.

업데이트 : 모든 것이 잘되었지만 BIGINT을 제외한 INT을 사용하고있었습니다. 그것은 그것을 고쳤다. 지금 ip2long 및 long2ip을 사용 중입니다.

+1

* "엉망"*으로 무엇을 의미합니까? – David

+0

'messsed up'IP가 필요합니다 – samayo

+2

DB에 정수로 저장하지 마십시오. 문제가 해결되었습니다. –

답변

4

사용을 변환 할 http://php.net/manual/en/function.ip2long.phphttp://php.net/manual/en/function.long2ip.php 기능을 재발견하지 마십시오. 당신

$ipToStore = ip2long($ip); 
if (false !== $ipToStore) { 
    // Store your ip 
} 

// Read DB 
echo long2ip($ipFromDB); 

그것을 저장하는 BIGINT를 사용하여 DB에 있는지 확인하기위한

또한 그것을 확인할 것이다.

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html#integer-types

+0

그래, 그걸 시도해도 똑같은 결과가 난다. 똑같은 문자열. – user1877016

+2

'int'가 충분하지 않아서 DB 행에 bigint가 저장되어 있는지 확인하십시오. –

+0

네, 그게 실수였습니다. bigint로 저장하지 않았습니다. 업데이트 됨. 감사합니다. – user1877016

6

STRONG SUGGESTION :

1) 문자열로 IP를 저장

혜택 : "."

2) 당신은 떠날 수있는 당신은 IPv4 및/또는 IPv6를 수용 할 수

3)

... 그리고는 ... 여기

이럴 ..

0

문제를 해결 사용하는 정수의 표현이라는 것이다 MySQL의 INT 열에 저장할 수있는 것보다 큽니다. PHP에서는 ip2long 함수를 사용하여 IP 주소를 적절한 32 비트 정수로 변환 할 수 있습니다.