inet_pton()PHP函数中的错误字符*非Zend*Piwik位置\u ip问题
我正在尝试与服务器上安装的Piwik数据库进行交互。在Piwik数据库中,存储的ip地址的值用inet_ntop()插入。我正在尝试解码这些值,并使用inet_pton()将它们提取出来,这样我就可以运行查询,在存储在本地数据库中的Piwik数据库中查找客户ip地址 当我构建查询时,问题就出现了。我获取数据库中存储的地址并通过inet\u pton()运行它,就像这样inet_pton()PHP函数中的错误字符*非Zend*Piwik位置\u ip问题,php,mysql,character-encoding,matomo,Php,Mysql,Character Encoding,Matomo,我正在尝试与服务器上安装的Piwik数据库进行交互。在Piwik数据库中,存储的ip地址的值用inet_ntop()插入。我正在尝试解码这些值,并使用inet_pton()将它们提取出来,这样我就可以运行查询,在存储在本地数据库中的Piwik数据库中查找客户ip地址 当我构建查询时,问题就出现了。我获取数据库中存储的地址并通过inet\u pton()运行它,就像这样 $data = mysql_fetch_assoc(mysql_query("SELECT ip_address FROM da
$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_错误,表示查询无效(因为错误字符)。我尝试添加mysql\u set\u字符集(“utf8”);在运行查询之前,没有(良好)结果
有什么想法吗
谢谢
$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\u pton的二进制输出转换为hex,然后将mysql存储的hex(location\u ip)值与$hexip变量进行比较
为了使mysql和php不会抛出错误,您需要将inet\u pton的二进制输出转换为十六进制,然后将mysql存储的十六进制(location\u ip)值与$hexip变量进行比较。二进制故事:
$bin_ip = '0x'.bin2hex(inet_pton($data['ip_address']));
"SELECT location_ip FROM piwik_log_visit WHERE hex(location_ip) = $bin_ip"
二元故事:
$bin_ip = '0x'.bin2hex(inet_pton($data['ip_address']));
"SELECT location_ip FROM piwik_log_visit WHERE hex(location_ip) = $bin_ip"
我和另一位朋友已经确定,函数inet_pton()肯定有问题……我们不知道为什么它会以这种方式转换字符。要从Piwik DB中选择原始数据,建议使用REST API选择日志,因为它会为您完成这项工作,在大多数情况下非常有用:)我和另一位朋友已经确定函数inet_pton()肯定有问题……我们不知道为什么它会以这种方式转换字符。要从Piwik DB中选择原始数据,建议使用REST API来选择日志,因为它为您完成了这项工作,在大多数情况下非常有用:)