Я пытаюсь регистрировать запросы на скрипт и хочу сохранить IP-адрес клиента в столбце int(4)
, используя INET_NTOA()
, чтобы вернуть его в удобочитаемой функции.
Однако вмой CGI-скрипт Perl $ENV{REMOTE_ADDR}
содержит IP в байтовом порядке хоста, который при вводе в базу данных с помощью функции INET_ATON()
преобразуется неправильно, поэтому при извлечении его у меня появляется совершенно другой адрес.
#!usr/bin/perl -wT
use strict;
use CGI;
use DBI;
my $dbh = DBI->connect("DBI:mysql:$db:$server", "$user", "$password");
my $addr = $ENV{REMOTE_ADDR};
my $insert = $dbh->prepare(qq[insert into access_log (ipaddress)
values (INET_ATON('$addr'))]);
$insert->execute or die "sql insert error";
my $retrieve = $dbh->prepare(qq[select INET_NTOA(ipaddress) as IP_Address
from access_log]);
$retrieve->execute or die "sql select error";
my $newIP = $retrieve->fetchrow_array;
В идеале этот скрипт должен возвращать значение $addr
, но вместо этого я получаю что-то совершенно другое.Как я могу отформатировать $addr
перед тем, как поместить его в базу данных?
Спасибо за вашу помощь.