0

我正在尝试与我们安装在服务器上的 Piwik 数据库进行交互。在 Piwik 数据库中,存储的 IP 地址的值通过 inet_ntop() 插入。我正在尝试解码这些值并使用 inet_pton() 将它们提取出来,这样我就可以运行查询以在存储在我们本地数据库中的 Piwik 数据库中查找客户 IP 地址。

当我构建查询时,问题就出现了。我将存储在数据库中的地址通过 inet_pton() 运行,就像这样......

$data = mysql_fetch_assoc(mysql_query("SELECT ip_address FROM data_table WHERE id = 1"));

$more_data = mysql_fetch_assoc(mysql_query("SELECT location_ip FROM piwik_log_visit WHERE location_ip = '".inet_pton($data['ip_address'])."'"));

问题出在 inet_pton($data['ip_address']) 将显示随机字符(有时)以及黑色菱形问号。它返回一个 mysql_error,表示查询无效(因为字符错误)。我尝试添加 mysql_set_charset("utf8"); 在没有(好)结果运行查询之前。

有什么想法吗?

谢谢!

4

2 回答 2

2
$data = mysql_fetch_assoc(mysql_query("SELECT ip_address FROM data_table WHERE id = 1"));
$hexip = bin2hex(inet_pton($data['ip_address']));
$more_data = mysql_fetch_assoc(mysql_query("SELECT location_ip FROM piwik_log_visit WHERE hex(location_ip) = '$hexip'"));

为了让mysql和php不报错,需要将inet_pton的二进制输出转换为hex,然后将mysql存储的hex(location_ip)值与$hexip变量进行比较。

于 2011-09-08T04:17:06.727 回答
1

二进制故事:

$bin_ip = '0x'.bin2hex(inet_pton($data['ip_address']));

"SELECT location_ip FROM piwik_log_visit WHERE hex(location_ip) = $bin_ip"
于 2011-12-04T04:15:57.317 回答