【问题标题】:Can't put IP-address in database无法将 IP 地址放入数据库
【发布时间】:2011-08-23 02:27:31
【问题描述】:

我正在尝试在我的数据库中添加一个 IP 地址。 如果我做这样的回声:

echo $_SERVER['REMOTE_ADDR'];

但是如果我试图把它放在一个变量或数据库中它什么都没有,所以在我的数据库中它说:NULL 我使用的命令:

$ip = $_SERVER['REMOTE_ADDR'];
mysql_query("UPDATE users SET last_ip='".$ip."' WHERE id=".$row['id']) or die(mysql_error());

我不知道我做错了什么。 有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

  • last_ip的数据类型是什么?
  • 转储 $sql 的值 - 您应该能够判断 $ip 是否为空或者 SQL 语句的格式是否正确。然后就可以直接把sql语句粘贴到mysql里面找错了。
  • 值是空的一直是空的,真奇怪..
  • 向我们展示一次已解析的查询。

标签: php mysql ip


【解决方案1】:

您需要将last_ip 列设为int(10) unsigned,然后将UPDATE 更改为:

$SQL = "UPDATE users 
        SET last_ip = INET_ATON('$ip')
        WHERE id='{$row['id']}'";

那么在选择时你会使用:

$SQL = "SELECT INET_NTOA(last_ip) AS last_ip 
        FROM users";

这会将 IP 地址转换为整数以进行有效存储。有关更多信息,请参阅INET_ATON()INET_NTOA() 的 MySQL 手册页。

否则,如果您希望将其存储为文本而不是以最有效的方式存储,您可以将您的 last_ip 列设置为 char(16) 并继续使用您在问题中发布的 UPDATE 查询。

【讨论】:

  • 嘿!谢谢回复。我尝试了您的 SQL 语句,并更改了数据库中的类型,但数据库中仍然没有任何内容。真的很奇怪..应该是服务器错误吗?编辑:即使我将其更改为 CHAR(16) 它也不起作用..
  • 如果你在var_dump($ip); 之前mysql_query 你会得到什么?
  • 还是什么都没有。我也问过这里的一些人,没有人知道。应该是这样的。没看懂。。
  • 好的,所以在您的代码中进一步存在问题。听起来变量$ip 可能在某处被覆盖。 var_dump $ip$_SERVER['REMOTE_ADDR'] 来验证他们携带的数据。
  • 我尝试了 var_dump,但不知何故 $ip 变量中仍然没有值。奇怪的是,我可以做一个回显并打印 IP 地址,但是当我打印 $ ip 变量它说它是空的..
【解决方案2】:

您的代码是正确的,应该可以工作。除非@wallyk 注释,否则 ip 字段的数据类型是不受支持的。

但是,只是为了确保将 WHERE 条件包含在 '(单引号)中并尝试。

【讨论】:

  • WHERE id='".$row['id'])."'"
猜你喜欢
  • 2020-12-07
  • 2011-03-04
  • 2015-03-10
  • 1970-01-01
  • 2023-04-03
  • 2014-02-21
  • 2013-06-13
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多