我正在创建一个应用程序,当您尝试使用您的IP地址登录时,将为您检索用户名。我这样做是为了防止多次注册和类似的事情。但是当我尝试将IP作为varbinary插入时,它说: IP列不能为空。我正在使用此查询来插入它: 错误
INSERT INTO `maindb`.`users` (
`id` ,
`username` ,
`password` ,
`email` ,
`ip` ,
`status` ,
`credits`
)
VALUES (
NULL , 'Dummy', 'dummy', 'dummy@example.com', UNHEX( '0.0.0.0' ) , '1', '0'
)
MySQL说:
#1048 - 列'ip'不能为空
另外,请注意我按照教程来获取此查询,所以不要问我是如何得到这个查询的。 请帮忙,谢谢
答案 0 :(得分:2)
参数字符串中的字符必须是合法的十六进制 数字:'0'..'9','A'..'F','a'..'f'。如果参数包含 任何非十六进制数字,结果为NULL
在UNHEX()
函数中包含点(“。”)将使其返回NULL。显然,您的ip
列设置为拒绝NULL值。
答案 1 :(得分:1)
一些事情:
id
设置为自动递增,则无需为ID插入“NULL”。 echo $_SERVER["REMOTE_ADDR"]
。答案 2 :(得分:1)
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'
);
使用ip2long php函数(如果在php中)
另外明智的是在mysql上使用INET_ATON()
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'
);
答案 3 :(得分:0)
您对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'
)