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

时间:2016-03-27 05:02:11

标签: php mysql

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

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

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

我知道这种方式

$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 个答案:

答案 0 :(得分:0)

如果我这样做,

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:准备您将用于切换到使用新值的机制(长),它可能会被注释掉几行,替换包含某些方法的库文件......等等

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页面上执行最后2个语句 甚至在shell会话(如果可能的话)上,以确保没有错误的用户弹出 ,例如:未找到专栏' ip'