首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我尝试插入ip2long整数时,错误的整数被插入到表中

当我尝试插入ip2long整数时,错误的整数被插入到表中
EN

Stack Overflow用户
提问于 2015-01-10 23:57:54
回答 2查看 277关注 0票数 1

我的代码:

代码语言:javascript
复制
$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。

曲棍球棒是怎么回事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-11 00:07:10

我假设您在数据库中使用了INT作为数据类型。简单地说,只要将ip列的数据类型更改为BIGINT,就可以解决问题。

代码语言:javascript
复制
INT range (-2147483648, 2147483647)
BIGINT range (-9223372036854775808, 9223372036854775807)

2953470927超出了签名INT的范围。

Refference:MySQL:整数类型

票数 1
EN

Stack Overflow用户

发布于 2015-01-11 00:07:38

不幸的是,根据您的系统(32位对64位),PHP返回不同的值。

在32位系统中,它使用有符号整数,在64位机器上使用无符号整数,因此您需要相应地存储数据。

根据您返回的内容,看起来您使用的是64位计算机,因此请将mysql列更改为无符号整数,或有符号或无符号的bigint。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27882481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档