Плохие символы с функцией PHP inet_pton () * Не Zend * Piwik location_ip проблема - PullRequest
0 голосов
/ 07 сентября 2011

Я пытаюсь взаимодействовать с базой данных Piwik, которую мы установили на нашем сервере.Внутри базы данных Piwik значение для сохраненного IP-адреса вставляется с помощью inet_ntop ().Я пытаюсь декодировать эти значения и извлекать их с помощью inet_pton (), чтобы я мог выполнить запрос, чтобы найти IP-адрес клиента в базе данных Piwik, которая была сохранена в нашей локальной базе данных.

Проблема возникает, когдаЯ строю запрос.Я беру сохраненный адрес в БД и запускаю его через 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");до того, как запрос был выполнен без (хороших) результатов.

Любые идеары?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011
$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 шестнадцатеричное (location_ip) значение с переменной $ hexip.

1 голос
/ 04 декабря 2011

Двоичная история:

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

"SELECT location_ip FROM piwik_log_visit WHERE hex(location_ip) = $bin_ip"
...