我需要将我在数据库中存储的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万行来说,这不是一个好方法
请建议任何可能的方法快速完成。
由于
答案 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'