从PHP到MySQL的IP存储
我正在创建一个应用程序,当您尝试使用ip地址登录时,它将为您检索用户名。我这样做是为了防止多次注册和类似的事情。但当我尝试将IP作为varbinary插入时,它会说: IP列不能为空。我正在使用此查询插入它: 错误 MySQL说: #1048-列“ip”不能为空 另外,请注意,我是按照教程来获取此查询的,所以不要问我是如何获得此查询的。 请帮忙,谢谢 参数字符串中的字符必须是合法的十六进制 数字:“0”…'9、‘A’…'F’、‘a’…'f’。如果参数包含 任何非十六进制数字,结果为空 在从PHP到MySQL的IP存储,php,mysql,Php,Mysql,我正在创建一个应用程序,当您尝试使用ip地址登录时,它将为您检索用户名。我这样做是为了防止多次注册和类似的事情。但当我尝试将IP作为varbinary插入时,它会说: IP列不能为空。我正在使用此查询插入它: 错误 MySQL说: #1048-列“ip”不能为空 另外,请注意,我是按照教程来获取此查询的,所以不要问我是如何获得此查询的。 请帮忙,谢谢 参数字符串中的字符必须是合法的十六进制 数字:“0”…'9、‘A’…'F’、‘a’…'f’。如果参数包含 任何非十六进制数字,结果为空 在UNHE
UNHEX()
函数中包含点(“.”),将使其返回NULL。显然,您的ip
列设置为拒绝空值。有几件事:
id
设置为自动递增,则不需要为id插入“NULL”echo$\u服务器[“REMOTE\u ADDR”]
进行此操作您对
UNHEX()
的参数是错误的,因为根据UNHEX()的文档,参数应该是'0'..'9、‘A’…'F’、‘a’…'f'
。所以它返回NULL
若要存储ip地址,可以从服务器变量获取ip地址
$ip = $_SERVER['REMOTE_ADDR'];
INSERT INTO `maindb`.`users` (
`id` ,
`username` ,
`password` ,
`email` ,
`ip` ,
`status` ,
`credits`
)
VALUES (
NULL , 'Dummy', 'dummy', 'dummy@example.com', '$ip' , '1', '0'
)
为什么要取消它的连接呢?注意任何将用户绑定到IP地址的方法,因为IP不能唯一地标识用户(NAT、VPN等)。也就是说,MySQL提供了将IP地址转换为存储为整数表示的功能。我需要一种存储用户数据的方法,但我不知道如何使用MySQL,只有PHP。你能告诉我如何存储IP吗?有很多种方法。请参阅@MichaelBerkowski关于使用
INET\u ATON()
将IPv4地址作为整数插入的评论@user3155126要么使用MySQL提供的INET\u NTOA()
/INET\u ATON()
,要么将列类型更改为VARCHAR
,并将其存储为stringOk,我将尝试。谢谢。我正在插入假数据来测试它,除了MySQL错误之外,我已经让应用程序工作了。
INSERT INTO `maindb`.`users` (
`id` ,
`username` ,
`password` ,
`email` ,
`ip` ,
`status` ,
`credits`
)
VALUES (
NULL , 'Dummy', 'dummy', 'dummy@example.com', sprintf("%u",ip2long('0.0.0.0')) , '1', '0'
);
INSERT INTO `maindb`.`users` (
`id` ,
`username` ,
`password` ,
`email` ,
`ip` ,
`status` ,
`credits`
)
VALUES (
NULL , 'Dummy', 'dummy', 'dummy@example.com', INET_ATON('0.0.0.0') , '1', '0'
);
$ip = $_SERVER['REMOTE_ADDR'];
INSERT INTO `maindb`.`users` (
`id` ,
`username` ,
`password` ,
`email` ,
`ip` ,
`status` ,
`credits`
)
VALUES (
NULL , 'Dummy', 'dummy', 'dummy@example.com', '$ip' , '1', '0'
)