从PHP到MySQL的IP存储

从PHP到MySQL的IP存储,php,mysql,Php,Mysql,我正在创建一个应用程序,当您尝试使用ip地址登录时,它将为您检索用户名。我这样做是为了防止多次注册和类似的事情。但当我尝试将IP作为varbinary插入时,它会说: IP列不能为空。我正在使用此查询插入它: 错误 MySQL说: #1048-列“ip”不能为空 另外,请注意,我是按照教程来获取此查询的,所以不要问我是如何获得此查询的。 请帮忙,谢谢 参数字符串中的字符必须是合法的十六进制 数字:“0”…'9、‘A’…'F’、‘a’…'f’。如果参数包含 任何非十六进制数字,结果为空 在UNHE

我正在创建一个应用程序,当您尝试使用ip地址登录时,它将为您检索用户名。我这样做是为了防止多次注册和类似的事情。但当我尝试将IP作为varbinary插入时,它会说: IP列不能为空。我正在使用此查询插入它: 错误

MySQL说:

#1048-列“ip”不能为空

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

参数字符串中的字符必须是合法的十六进制 数字:“0”…'9、‘A’…'F’、‘a’…'f’。如果参数包含 任何非十六进制数字,结果为空

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

有几件事:

  • 如果
    id
    设置为自动递增,则不需要为id插入“NULL”
  • UNHEX()返回null-为什么不为此下拉用户的IP地址?在PHP中,您可以使用
    echo$\u服务器[“REMOTE\u ADDR”]
    进行此操作
  • 使用php函数(如果在php中)

    其他明智的做法是在mysql上使用INET_ATON()


    您对
    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'
     )