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


How to convert stored ip in database to ip2long

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

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

我应该怎么做,每件事都是在线的,我不能把任何东西离线,我应该如何安全地做出改变。

我知道这条路

$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万行的来说,这不是一个好方法

请提出任何可能的快速方法。

感谢

如果我这样做,

1-我将创建一个新的列

ALTER TABLE table_name ADD ip_long bigint(20) unsigned;

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

$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:准备将用于切换到使用新值(LONG)的机制,可以注释掉几行,替换包含一些方法的库文件。。。etc

3.2-删除旧列ip,并将新列ip_long重命名为ip

ALTER TABLE table_name DROP COLUMN ip;
ALTER TABLE table_name CHANGE ip_long ip bigint(20) unsigned;

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

ALTER TABLE table_name CHANGE ip ip_old varchar(15); --replace varchar(15) with actual column definition ex: varchar(15) not null... etc.

当你确定过程是可以的,并且你不再需要旧的ip,只需放弃它

ALTER TABLE table_name DROP COLUMN ip_old;

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