Неверные символы в функции PHP inet_pton () * Не в Zend * Проблема Piwik location_ip

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

Есть идеи?

Спасибо!


person n0nag0n    schedule 07.09.2011    source источник
comment
Я и другой друг установили, что с функцией inet_pton () определенно что-то не так ... мы не знаем, почему она так конвертирует символы.   -  person n0nag0n    schedule 07.09.2011
comment
Чтобы выбрать необработанные данные из базы данных Piwik, рекомендуется использовать REST API для выбора журналов, поскольку он выполняет свою работу за вас, что очень полезно в большинстве случаев :) piwik.org/docs/analytics-api/reference/#Live   -  person NickT    schedule 14.09.2011


Ответы (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.

person Awesome    schedule 08.09.2011

Бинарная история:

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

"SELECT location_ip FROM piwik_log_visit WHERE hex(location_ip) = $bin_ip"
person Pandora    schedule 04.12.2011