Php 如何将服务器$作为id存储在数据库中
我想将Ip地址作为Id存储在数据库中。 为此,我首先使用Php 如何将服务器$作为id存储在数据库中,php,mysql,sql,Php,Mysql,Sql,我想将Ip地址作为Id存储在数据库中。 为此,我首先使用str replace来去除这些点 $ipAddress = $_SERVER['REMOTE_ADDR']; $user_id = str_replace(".","",$ipAddress); 我的查询如下所示: CREATE TABLE `posts` ( `id` int(24) NOT NULL PRIMARY KEY AUTO_INCREMENT, `text` text NOT NULL ) ENGINE=InnoDB DE
str replace
来去除这些点
$ipAddress = $_SERVER['REMOTE_ADDR'];
$user_id = str_replace(".","",$ipAddress);
我的查询如下所示:
CREATE TABLE `posts` (
`id` int(24) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
问题:他在数据库中将用户id
存储为“2147483647”
为了进行测试,我对$user\u id代码>它给了我这个值(我的ip):9421491192
那么,为什么它要在数据库中存储另一个值,而不是像上面那样存储我的ip
您的id列应该只是一个自动递增的数字列。与中一样,不要在此处使用IP
如果要去除这些点,请填充八位字节,这样剩下的3位数字就不会是1.23.45.67和12.34.5.67了。然而,我建议完全跳过这一步,只保留这些点
为IP地址创建一个单独的列,并将其存储为字符或字符串字段
在ip_地址列上创建唯一索引
不要这样做..去掉这些点太可怕了1.23.45.67
将产生与12.34.5.67
相同的值。如果要将IP地址转换为数字,请使用ip2long()
。为IP存储创建一个新字段,在php中使用unsigned int(11),然后在mysql中使用ip2long(),或使用INET_ATON。相反,php中的long2ip()或mysql中的INET_NTOA。2147483647
是有符号的int
列可以存储的最大值。你所做的一切都是错误的/不好的-IP不是INT,它们不是用户ID,删除点是可怕的。重新开始。