获取完整的IP地址以在MySQL中显示

时间:2012-02-09 23:11:19

标签: php mysql

以下代码似乎只返回我的IP地址的前两位数字。我怎样才能获得完整的IP地址?

$ip2 = $_SERVER['REMOTE_ADDR'];

编辑:我将它作为varchar(30)latin1_swedish_ci放入MySQL。是否有格式更改将显示完整的IP?

编辑2:也许是我的查询正在改变格式。这是:

$query1 = sprintf("INSERT INTO values VALUES (NULL, 'phoenix', %d, '%s', %d, %d, %d, NULL)", $submissionid, $fullurl, $uid, $ip1, $ip2);

mysql_query($query1) or die(mysql_error());

3 个答案:

答案 0 :(得分:4)

绝对没有错
$ip2 = $_SERVER['REMOTE_ADDR'];

你说它似乎只包含前两位数,但我猜你做了这个假设,因为$query1只包含那个。

问题是您在sprintf()中使用%d,它会尝试获取整数值$ip2。 IP地址不是整数,而是字符串,因此您应该使用%s

sprintf("INSERT INTO values VALUES (NULL, 'phoenix', %d, '%s', %d, '%s', '%s', NULL)",
     $submissionid, $fullurl, $uid, $ip1, $ip2);

答案 1 :(得分:2)

我同意这个PHP很好。

但是...

在varchar(30)中存储是一个糟糕的想法。您似乎假设您将始终获得IPv4地址。你不会。

举个例子:

2001:470:1f04:日:22cf:30ff:feb0:E22B

这不适合你的领域!

答案 2 :(得分:0)

将%s代替%d将会插入IP地址。