我正在尝试与我们在服务器上安装的Piwik数据库进行交互。在Piwik数据库中,使用inet_ntop()插入存储的ip地址的值。我正在尝试解码这些值并使用inet_pton()将它们拉出来,这样我就可以运行查询来查找Piwik数据库中存储在本地数据库中的客户IP地址。
当我构建查询时,问题就出现了。我在db中获取存储的地址并通过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”);在运行查询之前没有(好)结果。
任何想法?
谢谢!
答案 0 :(得分: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的二进制输出转换为十六进制,然后将mysql存储的十六进制(location_ip)值与$ hexip变量进行比较。
答案 1 :(得分:1)
二进制故事:
$bin_ip = '0x'.bin2hex(inet_pton($data['ip_address']));
"SELECT location_ip FROM piwik_log_visit WHERE hex(location_ip) = $bin_ip"