首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据库中存储的ip转换为ip2long

如何将数据库中存储的ip转换为ip2long
EN

Stack Overflow用户
提问于 2016-03-27 13:02:11
回答 1查看 244关注 0票数 2

我需要将我存储在数据库中的ip转换为ip2long

ip像xxx.xxx.xxx.xxx一样存储,我想在ip2long中转换这些值

我应该怎么做,所有的东西都是在线的,我不能把任何东西放到离线,我应该如何安全地进行更改。

我知道这条路

代码语言:javascript
复制
$query ="SELECT id,ip from table";
while ($row=mysqli_fetch_assoc($result)){
    $ip2long=ip2long($row['ip']);
    $id=$row['id'];
    $update="UPDATE table SET ip='$ip2long' WHERE id='$id'";
}

但是对于超过1000万行来说,这不是一种好的方法

请建议任何可能的方法来快速完成它。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-03-27 16:15:15

如果我要这么做,

1-我将创建一个新列

代码语言:javascript
复制
ALTER TABLE table_name ADD ip_long bigint(20) unsigned;

PHP 2-执行代码来转换ip -> iplong并更新(设置)新列中的长值

代码语言:javascript
复制
$query ="SELECT id,ip from table";
while ($row=mysqli_fetch_assoc($result)){
    $ip2long=ip2long($row['ip']);
    $id=$row['id'];
    $update="UPDATE table SET ip_long='$ip2long' WHERE id='$id'";
}
echo "conversion completed";

3.1确保你的站点准备好处理IP地址:准备好你将用来切换到使用新值(long)的机制,它可以注释掉几行,替换一个包含一些方法的库文件...等

3.2- drop old column ip,并将新列ip_long重命名为ip

代码语言:javascript
复制
ALTER TABLE table_name DROP COLUMN ip;
ALTER TABLE table_name CHANGE ip_long ip bigint(20) unsigned;

3.2提示:对于双重安全,您可以将旧的列( IP )重命名为其他名称(ip_old)并保留,以防该过程在任何阶段都不成功,或者您出于任何原因需要恢复为常规IP格式,您可以执行以下语句来重命名该列:

代码语言:javascript
复制
ALTER TABLE table_name CHANGE ip ip_old varchar(15); --replace varchar(15) with actual column definition ex: varchar(15) not null... etc.

当您确定进程正常并且不再需要旧ip时,只需放弃它

代码语言:javascript
复制
ALTER TABLE table_name DROP COLUMN ip_old;

注意:建议在同一个PHP页上甚至在shell会话上执行最后两条语句(如果可能),以确保用户不会弹出错误,例如:列未找到'ip‘

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

https://stackoverflow.com/questions/36244012

复制
相关文章

相似问题

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