从PHP存储在MySQL中的IP

时间:2014-01-02 21:13:43

标签: php mysql

我正在创建一个应用程序,当您尝试使用您的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'不能为空

另外,请注意我按照教程来获取此查询,所以不要问我是如何得到这个查询的。 请帮忙,谢谢

4 个答案:

答案 0 :(得分:2)

根据UNHEX() documentation

  

参数字符串中的字符必须是合法的十六进制   数字:'0'..'9','A'..'F','a'..'f'。如果参数包含   任何非十六进制数字,结果为NULL

UNHEX()函数中包含点(“。”)将使其返回NULL。显然,您的ip列设置为拒绝NULL值。

答案 1 :(得分:1)

一些事情:

  1. 如果您的id设置为自动递增,则无需为ID插入“NULL”。
  2. UNHEX()返回null - 为什么不为此拉下用户的IP地址?在PHP中,您可以使用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'
 )