2015-01-10 78 views
1

我的代碼:當我嘗試插入ip2long整數,錯誤整數被插入到表

$ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'][0]); // Gives an IP address string. Example: "176.10.99.207" 

$ipL = ip2long($ip); // An integer, which for this example would be 2953470927. 

if($stmt_insert_ip = $ip_link->prepare("INSERT INTO dataTable(ip,datetime) VALUES(?,?)")){ 
    $stmt_insert_ip->bind_param('is',$ipL,date("Y-m-d H:i:s")); 
} 

但是,當我檢查我的MySQL表中,ip列下的新插入的值是2147483647,這是「127.255.255.255」。

當我運行echo($ipL);,不過,我得到2953470927.

什麼H-E-雙曲棍球棒是怎麼回事?

回答

1

我假定你已經使用INT在你的數據庫的數據類型。爲了使這個故事,總之只是改變ip列的數據類型來BIGINT和問題將得到解決。

INT range (-2147483648, 2147483647) 
BIGINT range (-9223372036854775808, 9223372036854775807) 

2953470927越過簽署的INT的範圍。

REFFERENCE:MySQL: Integer types

1

不幸的是取決於你的系統(32位和64位)PHP返回不同的值。

它使用符號整數,並在64位機器上它採用無符號整數,所以你需要相應地存儲數據的32位系統上。

根據你回來好像您使用的是64位機,所以改變你的mysql列一個無符號整數,或者符號或無符號BIGINT