我需要将我存储在数据库中的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万行来说,这不是一种好的方法
请建议任何可能的方法来快速完成它。
谢谢
发布于 2016-03-27 16:15:15
如果我要这么做,
1-我将创建一个新列
ALTER TABLE table_name ADD ip_long bigint(20) unsigned;PHP 2-执行代码来转换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- drop old column 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‘
https://stackoverflow.com/questions/36244012
复制相似问题