0

次のPHP/SQLで...

function ip2long6($ip)
{//ipv6 to ipv4 (string) to get Windows 7 local working
// Temp work-around until we convert the string to support ipv6 natively in SQL.
 if (substr_count($ip, '::')) {$ip = str_replace('::', str_repeat(':0000', 8 - substr_count($ip,':')).':',$ip);}

 $ip = explode(':',$ip);
 $r_ip = '';

 foreach ($ip as $v) {$r_ip .= str_pad(base_convert($v,16,2),16,0,STR_PAD_LEFT);}

 return base_convert($r_ip,2,10);
}

$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$ip = mysql_real_escape_string(ip2long6($ip));
INSERT INTO log (ip) VALUES (INET_ATON('1208321'))

次のエラーが表示されます...

列 'ip' を null にすることはできません

今のところ $ip を IPv4 互換にするにはどうすればよいでしょうか?


実用的な答え...

if (is_int($ip)) {$ipsql = mysql_real_escape_string("INET_ATON('$ip')");}
else {$ipsql = mysql_real_escape_string($ip);}

これで、私は単に で返信INET_ATON('$ip')$ipsqlます。

4

1 に答える 1

0

INET_ATON を使用して stringed-int を変換しています。その関数は dot.quad アドレスを想定しています。

INET_ATON('127.0.0.1');

は有効な入力ではないため、関数は null を返します。

mysql> select inet_aton('12345'), inet_aton('127.0.0.1');
+--------------------+------------------------+
| inet_aton('12345') | inet_aton('127.0.0.1') |
+--------------------+------------------------+
|               NULL |             2130706433 |
+--------------------+------------------------+
于 2013-03-31T20:12:55.703 に答える